Deep Learning

Deep Learning/NLP

LLM 용어정리 - > tokenization, in - context learning, emergent abilities, temperature, BPE(Byte Pairing Encoding) 알고리즘

Tokenizing토큰은 텍스트를 구성하는 개별 단위'나는 밥을 먹는다' -> '나는','밥을','먹는다'  토큰으로 나눔huggingface tokenizer가 요즘 잘 되어 있음. 1)  단어 단위 토큰화 I ate a hotdog -> 'I','ate','a','hotdog'장점: 토큰 길이가 상대적으로 짧음단점:  vocabulary 집합크기가 너무 커짐 (cat,cats는 같은 의미이지만 따로 한 칸 씩을 차지), Unknown() 토큰 발생 가능성 높음  2) 문자 단위 토큰화   I ate a hotdog -> 'I','a','t','e','a','h','o','t','d','o','g' 장점: vocabulary 집합 크기가 작음, unknown 토큰 () 발생할 가능성이 적음 단점: 토큰..

Deep Learning/from scratch II

[밑바닥부터 시작하는 딥러닝 2] - 8장 어텐션 III

어텐션에 관한 남은 이야기 양방향 RNN 양방향 LSTM은 역방향으로 처리하는 LSTM 계층도 추가한다. 각 시각에서는 이 두 LSTM 계층의 은닉 상태를 연결 시킨 벡터를 최종 은닉 상태로 처리한다(연결 외 합(sum), 평균(average) 내는 방법도 있다) 양방향으로 처리함으로써 각 단어에 대응하는 은닉상태 벡터에는 좌와 우 양쪽 방향으로부터의 정보를 집약하여 균형 잡힌 정보가 인코딩 되게 한다. 입력문장을 왼쪽->오른쪽(순방향 LSTM) 과 오른쪽->왼쪽(역방향 LSTM) 각 출력을 연결되게 한다. 출처: https://github.com/oreilly-japan/deep-learning-from-scratch-2/blob/master/common/time_layers.py class TimeB..

Deep Learning/from scratch II

[밑바닥부터 시작하는 딥러닝 2] - 8장 어텐션 II

어텐션을 갖춘 seq2seq 구현 Encoder 구현 앞의 Encoder 클래스는 LSTM의 계층의 마지막 은닉 상태 벡터를 반환한 반면, 모든 은닉 상태를 반환하여 구현한다. # coding: utf-8 import sys sys.path.append('..') from time_layers import * from seq2seq import Encoder, Seq2seq from attention_layer import TimeAttention class AttentionEncoder(Encoder): def forward(self, xs): xs = self.embed.forward(xs) hs = self.lstm.forward(xs) return hs #모든 은닉상태 벡터 def backward..

Deep Learning/from scratch II

[밑바닥부터 시작하는 딥러닝 2] - 8장 어텐션 I

어텐션의 구조 어텐션 메커니즘은 seq2seq를 한 층 더 강력하게 해준다. seq2seq의 문제점 seq2seq에서는 encoder가 시계열 데이터를 인코딩한다. 이때의 출력은 고정 길이 벡터인데, 고정길이는 입력 문장의 길이가 아무리 길어도 항상 같은 길이의 벡터로 변환 한다는 특징이 있다. 이러한 seq2seq의 문제점은 필요한 정보가 벡터에 다 담기지 못하게 된다. Encoder 개선 여태까지 encoder에서 LSTM 계층 마지막 은닉 상태만을 decoder에 전달했다. encoder 출력 길이는 입력문장의 길이에 따라 바꿔주는 것이 개선 포인트이다. 각 단어의 은닉 상태 벡터를 모두 이용하면 입력된 단어와 같은 수의 벡터를 얻을 수 있다. 5개가 입력되었고, encoder는 5개의 벡터를 출력..

Deep Learning/from scratch II

[밑바닥부터 시작하는 딥러닝 2 ] - 7장 RNN을 사용한 문장 생성 II

seq2seq 개선 seq2seq를 개선하기 위한 두가지 방법을 제안한다. 입력데이터 반전(Reverse) 입력데이터의 순서를 반전시킨다 (x_train, t_train), (x_test, t_test) = sequence.load_data('addition.txt') char_to_id, id_to_char = sequence.get_vocab() # Reverse input? ================================================= is_reverse = False # True if is_reverse: x_train, x_test = x_train[:, ::-1], x_test[:, ::-1] x_test[:, ::-1]을 통해 배열의 행을 반전 시킨다. 입력 데이터..

Deep Learning/from scratch II

[밑바닥부터 시작하는 딥러닝 2] - 7장 RNN을 사용한 문장 생성 I

언어 모델을 사용한 문장 생성 RNN을 사용한 문장 생성의 순서 시계열 데이터(T개분 만큼) 모아 처리하는 Time LSTM과 Time Affine 계층을 만들었다. I라는 단어를 주었을 때 출력한 확률분포는 다음과 같이 보인다. 이것을 기초로 다음 단어를 생성하는 방법은 두가지가 있다. 1) 확률이 가장 높은 단어 선택하기. 결과가 일정하게 정해짐 (결정적 방법) 2) 확률적으로 선택, 각 후보 단어의 확률에 맞게 선택하는것, 확률이 높은 단어는 선택되기 쉽고 확률이 낮은 단어는 선택되기 어렵다. 이 방식은 선택되는 단어가 매번 다르다. (확률적 결정 방법) 2번째 방법(확률적 선택)으로 샘플링을 수행한 결과로 say가 선택되었다. 다만 결정적이 아니고 확률적으로 결정되었다는 특징이 있다. 다른 단어들..

Deep Learning/from scratch II

[밑바닥부터 시작하는 딥러닝 2] - 6장 게이트가 추가된 RNN II

LSTM을 사용한 언어 모델 LSTM 계층을 사용하는 Rnnlm 클래스 구현 import sys sys.path.append('..') from time_layers import * from base_model import BaseModel class Rnnlm: def __init__(self, vocab_size=10000, wordvec_size=100, hidden_size=100): V, D, H = vocab_size, wordvec_size, hidden_size rn = np.random.randn # 가중치 초기화 embed_W = (rn(V, D) / 100).astype('f') lstm_Wx = (rn(D, 4 * H) / np.sqrt(D)).astype('f') lstm_Wh =..

Deep Learning/from scratch II

[밑바닥부터 시작하는 딥러닝 2] - 6장 게이트가 추가된 RNN I

RNN의 문제점 기울기 소실 또는 기울기 폭발 RNN은 시계열 데이터의 장기 의존 관계를 학습하기 어렵다. 두가지 주 원인이 기울기 소실, 기울기 폭발이 있다. 언어 모델은 주어진 단어들을 기반으로 다음 단어를 예측한다. Tom was watching TV in his room. Mary came into the room. Mary said hi to ____ 빈칸에 들어갈 단어는 Tom이다. Tom이 방에서 tv를 보고 있는 것과, mary가 방으로 들어간 정보가 기억돼야 한다. 정답이 Tom인것을 도출하기 위한 학습은 BPTT로 수행한다. 역전파 수행시 RNN 계층이 과거 방향으로 의미있는 기울기를 전달한다. 기울기는 의미있는 정보가 들어있고, 이것을 과거로 전달함으로써 장기 의존 관계를 학습한다. ..

해파리냉채무침
'Deep Learning' 카테고리의 글 목록