본문 바로가기

(63)
5장 RNN (1) 언어 모델 언어 모델은 단어 나열(시퀀스)에 확률을 부여한다. 그 시퀀스가 일어날 가능성이 어느정도인지를 확률로 평가하는 것이다. 언어 모델을 수식으로 이해해보자. $w_1$, ..., $w_m$이라는 m개 단어로 된 문장이 있고, 이때 단어가 $w_1$, ..., $w_m$이라는 순서로 출현할 확률을 $P(w_1, ..., w_m)$으로 나타낸다. 이 확률은 여러 사건이 동시에 일어날 확률이므로 동시 확률이라 한다. 이 동시 확률을 사후 확률(조건부 확률)을 사용하여 다음과 같이 분해할 수 있다. 식 5.4의 결과는 확률의 곱셈정리로부터 유도할 수 있다. 이 곱셈 정리를 사용하면 m개 단어의 동시확률을 사후 확률로 나타낼 수 있다. 이를 반복하여 식 5.4를 유도한다. 식 5.4를 보면 알 수 있는 것..
4장 word2vec 속도 개선 word2vec 개선 (1) 은닉층의 뉴런이 100개인 CBOW 모델을 생각해보자 다음의 두 계산이 병목이 된다. 1. 입력층의 원핫 표현과 가중치 행렬 $W_{in}$의 곱 계산 뉴런의 크기가 100만개라면 원-핫 벡터는 상당한 메모리를 차지하게된다. 또 이 원핫 벡터와 가중치 행렬의 곱 계산에도 상당한 자원을 소모하게 된다. 이는 Embedding 계층을 도입하여 해결한다. 2. 은닉층의 가중치 행렬 $W_{out}$의 곱 및 Softmax 계층의 계산 마찬가지로 다루는 어휘가 많아짐에 따라 계산량이 증가한다. 이는 네거티브 샘플링이라는 새로운 손실 함수를 도입해 해결한다. Embedding 계층 사실 이 계산은 단어 ID에 해당하는 행벡터를 추출하는 것뿐이다. 따라서 원핫 표현으로의 변환과 MatM..
3장 word2vec 통계 기반 기법의 문제점 대규모 말뭉치의 어휘 수는 엄청 많기 때문에 통계 기반 기법에서는 거대한 행렬(PPMI 같은)을 만들게 된다. 이러한 거대한 행렬에 SVD를 적용하는 것은 현실적이지 않다. 또한 미니배치 학습이 불가능하다. 반면 추론 기반 기법은 신경망을 통해 미니배치 학습이 가능하고 이것의 부산물로 단어의 분산 표현을 얻어낼 수 있다. 추론 기반 기법 개요 추론이란 위의 그림처럼 맥락이 주어졌을 때 "?"에 들어갈 단어를 추측하는 작업이다. 모델 관점에서 보면 다음과 같다. 신경망에서의 단어 처리 신경망에서 you, say 같은 단어를 처리할 수 있는 방법으로 고정 길이의 벡터로의 변환을 사용할 수 있다. 여기서는 one-hot을 사용한다. (이 방법도 문장의 길이가 길어지면 문제점이 생길 것..
2장 자연어와 단어의 분산 표현 시소러스 시소러스는 유의어 사전으로, 동의어나 유의어가 한 그룹으로 분류되어 있다. 또한 단어들의 의미에 상하위 관계가 존재한다. 시소러스는 다음과 같은 문제점들이 있다. 시대 변화에 대응하기 어렵다. 사람을 쓰는 비용이 크다 단어의 미묘한 차이를 표현할 수 없다. 통계 기반 기법 말뭉치(corpus)라고 부르는 텍스트 데이터를 이용한다. 통계 기반 기법은 말뭉치로부터 효율적으로 그 핵심을 추출하는 것이다. 말뭉치 전처리 def preprocess(text): text = text.lower() text = text.replace('.', ' .') words = text.split(' ') word_to_id = {} id_to_word = {} for word in words: if word not ..
8장 딥러닝 층을 깊게 하는 이유 층일 깊게 한 신경망은 깊지 않은 경우보다 적은 매개변수로 같거나 그 이상의 수준에 달하는 표현력을 달성할 수 있다. 이 경우 필요한 매개변수를 5x5=25이다. 이러한 연산은 3x3 두 번으로 대체될 수 있다. 후자의 경우 매개변수가 2x3x3=18개이다. 이처럼 작은 필터를 겹쳐 신경망을 깊게 할 때의 장점은 매개변수 수를 줄여 넓은 수용영역을 소화할 수 있다. 그리고 층과 층 사이에 ReLU, BN 등을 끼움으로써 신경망의 표현력 또한 개선된다. VGG VGG는 합성곱 계층와 풀링 계층으로 구성되는 기본적인 CNN이다. VGG에서 주목할 점은 3x3의 작은 필터를 사용한 합성곱 계층을 연속으로 거친다는 것이다. GoogLeNet GoogLeNet은 세로 방향만 깊을 뿐 아니라 ..
7장 CNN (2) CNN 구현하기 MNIST 데이터를 위한 간단한 CNN을 구현한다. 구조는 다음과 같다. class SimpleConvNet: def __init__(self, input_dim=(1, 28, 28), conv_param={'filter_num':30, 'filter_size':5, 'pad':0, 'stride':1}, hidden_size=100, output_size=10, weight_init_std=0.01): filter_num = conv_param['filter_num'] filter_size = conv_param['filter_size'] filter_pad = conv_param['pad'] filter_stride = conv_param['stride'] input_size = in..
7장 CNN (1) 전체 구조 지금까지 본 신경망은 FFNN이었다. CNN은 뭐가 다를까? - Affine-ReLU 연결이 Conv-ReLU-(Pooling)으로 바뀌었다. - 상위 층에는 여전히 Affine-ReLU 연결을 사용할 수도 있다. 합성곱 계층 FFNN의 문제점 이미지 데이터는 3차원 형상이며, 이 형상에는 공간적 정보가 담겨있다. FFNN으로 이 이미지를 처리하기 위해서는 Flatten을 수행하여 형상을 무시하고 모든 입력 데이터를 동등한 뉴런으로 취급하여 형상에 담긴 정보를 살릴 수가 없다. 한편 CNN은 이 형상을 유지하여 데이터를 제대로 이해할 가능성이 있다. 합성곱 연산 합성곱 연산은 필터의 위도우를 일정 간격으로 이동해가며 입력 데이터에 적용한다. 여기에 사용되는 연산은 단일 곱셈-누산으로 원소별 곱..
6장 학습 관련 기술들 (2) 가중치의 초깃값 은닉층의 활성화값 분포 가중치의 초깃값에 따라 은닉층의 활성화값들이 어떻게 변하는지 알아보자. 시그모이드 활성화 함수를 사용하는 5층 신경망에 무작위로 생성한 입력 데이터를 흘려 각 층의 활성화 값 분포를 히스토그램으로 그려보자. - 각 층의 활성화 값들이 0과 1에 치우져 분포되어 있다. - 시그모이드 함수는 출력이 0 또는 1에 가까워 질수록 gradient가 0에 다가간다. 그러면 역전파의 기울기가 점점 작아지다가 사라지게 된다. 이것이 gradient vanishing으로 알려진 문제이다. 표준편차를 0.01로 바꿔보자 - 0과 1에 치우치진 않아서 기울기 소실 문제가 일어나지는 않지만 0.5 부근에 집중되어 있다. - 활성화 값들이 한 쪽으로 치우졌다는 것은 표현련 관점에서 문제..