학습은 크게 순전파와 역전파라는 두 단계로 이루어지는데, 순전파 단계에서는 입력 데이터가 모델을 통과하면서 예측값을 계산한다. 각 뉴런은 입력과 가중치를 곱한 후 활성화 함수를 통과하여 출력을 생성한다. 이러한 과정은 입력층에서부터 출력층까지 차례로 진행된다.
순전파가 완료되면 역전파 단계에서는 오차를 계산하고, 이 오차를 사용하여 가중치와 편향을 조정한다. 오차는 실제 값과 예측 값 사이의 차이로 계산된다. 역전파는 출력층에서부터 입력층까지 역방향으로 진행된다.
역전파의 핵심 아이디어는 오차를 거슬러 올라가며 각 층의 가중치에 대한 기여도를 계산하는 것이다. 이를 위해 미분 연쇄 법칙(Chain Rule)을 사용하여 각 노드의 입력에 대한 손실 함수의 미분 값을 계산한다. 이 미분 값은 가중치와 편향을 업데이트하는 데 사용된다. 역전파는 경사 하강법과 같은 최적화 알고리즘과 결합되어 신경망의 가중치를 조정하여 예측 성능을 향상시킨다.
. 역전파는 국소적 미분을 전달하고 있고, 화살표 아래 값이 미분값이다. 현재 1 → 1.1 → 2.2 순으로 미분 값이 전달되었으므로 사과 가격에 대한 지불 금액의 미분값은 2.2라고 할 수 있다. 사과가 1원 오르면 최종 금액은 2.2배 증가하게 되는 것이다. 이러한 방식으로 여러 변수들에 대한 미분값을 효과적으로 구할 수 있는 것이 역전파이다.
사진, 언어와 같은 인간의 표현 방식은 기계가 이해할 수 있는 수치 형태로 변환해주어야 한다.
이를 벡터화라고 말하며, 고차원의 벡터를 필요한 정보를 보존하면서 저차원으로 Mapping하는 것이 임베딩이다.
NLP에서는 One-hot 인코딩, Sparse Matrix로 표현된 각 단어를 저차원의 Dense Matrix로 임베딩하게 된다.
단순히 텍스트를 ‘구분’하는 것이 아니라 의미적으로 ‘정의’할 수 있도록, 유사한 의미의 단어는 임베딩 공간에서 가까이 놓이도록 수행된다.
NLP 분야에서의 대표적인 임베딩 방법으로는
CountVectorizer
,TfidfVectorizer
,Word2Vec
이 있다.
단순히 각 텍스트의 등장 횟수를 기준으로 특징을 추출하는 것이다. 가령 ‘하늘에 구름이 둥실둥실 떠있다’라는 문장을 벡터화할 때, 단어 사전을 등장 횟수에 따라 [’하늘에’, ‘구름이’, ‘둥실’, ‘떠있다’]를 [1, 1, 2, 1]로 정의하는 것이다. 하지만 이 방법은 큰 의미가 없는 조사가 높은 값을 가진다는 단점이 있다.
위 두 방법이 단어의 등장 빈도를 기준으로 한 임베딩 방법이었다면, Word2Vec은 학습을 통해 단어 간의 유사도를 특징으로 추출한다.
이 때 ‘비슷한 위치에 등장하는 단어는 비슷한 의미를 갖는다’는 분포 가설을 활용한다.
Word2Vec에는 CBOW
와 Skip-gram
이 있다.
CBOW는 어떤 단어를 문맥 안의 주변 단어들을 통해 예측하는 방법
Skip-gram은 어떤 단어를 가지고 주변 단어들을 예측하는 방식이다.
예를 들어 CBOW는 ‘나는 오늘 아침에 __를 먹었다’라는 문장의 빈칸에 들어갈 단어를 예측하는 방식으로 > 이뤄진다. 이를 위해 주변 단어를 One-hot 인코딩으로 나타내어 Input 벡터로 사용하고, 여기에 가중치 행렬을 곱해 n차원 벡터를 만든다. 이 n차원 벡터들을 평균낸 다음 다시 가중치 행렬을 곱해 One-hot 인코딩 차원과 같은 벡터로 만든다. 이 벡터를 정답 Label의 One-hot 인코딩 벡터와 비교하여 가중치를 업데이트한다. 이렇게 학습을 수행한 다음, 가중치 행렬의 각 행을 임베딩 벡터로 활용한다.
프레임워크(Framework)는 서비스 분야, 딥러닝, 웹 개발 등 맥락에 따라 사용하는 용도가 다양하다. 추상적인 의미로서, 작업을 효율적으로 할 수 있도록 짜놓은 틀로 이해할 수 있다. 개발 분야에 한정하여 말하자면, 보통 특정 작업을 도와줄 수 있는 라이브러리나 함수를 모아둔 집합체를 의미한다.
딥러닝 프레임워크는 딥러닝 학습을 도와줄 수 있도록 데이터 로드, 데이터 학습, 평가 등을 도와줄 수 있는 모듈과 함수를 제공한다. 딥러닝 프레임워크가 지원하는 사항(데이터 로드, 모델 구축, 손실함수, 평가, 자동 미분)들은 대체로 비슷하지만 계산 / 구현하는 방식에 차이가 있다. 딥러닝 프레임워크는 보통 Python 언어를 기반으로 하며 대표적인 프레임워크로는 PyTorch, Tensorlfow, Keras가 있다. 각 프레임워크마다 장단점이 있지만, 최근 딥러닝 분야에서는 PyTorch의 사용 비중이 점차 높아지고 있는 추세다.
Locality는 유사한 요소들이 가까운 위치에 있다는 특성이다. 위 그림에서 CNN의 계산 과정을 보면, 모든 입력이 모든 출력에 영향을 미치는 FCN과 다르게 가까운 위치의 픽셀들 사이의 가중합만이 출력에 영향을 미친다. 이는 가까운 위치에 유사한 요소들이 있다는 가정에서 비롯된 연산이다.
Translation Invariance는 특정 패턴의 위치가 옮겨져도 같은 특성을 가진다는 것이다. 강아지가 있는 그림에서 강아지의 위치가 왼쪽 아래에서 오른쪽 위로 이동하더라도 강아지라는 대상의 속성은 변하지 않는다. 이러한 특성을 반영하기 위해 커널을 한 부분에만 적용하지 않고 이동시키며 이미지 전체에 대해 연산을 수행하는 것 역시 CNN의 Inductive Bias를 반영한 연산이다.
CNN에 이미지의 공간적 특성에 따른 Inductive Bias가 적용되었다면 , RNN에는 시간에 따른 Inductive Bias가 적용된다. RNN은 주로 시간에 따라 변화하는 음성이나 실시간 데이터를 처리하는데 사용되기 때문이다.
RNN은 Sequential과 Temporal Invariance라는 Inductive Bias를 가진다. Sequential은 입력이 순차적인 특성을 가진다고 가정하는 것이며, Temporal Invariance는 시간에 따라 네트워크의 출력이 변하지 않는다는 가정이다. Sequential을 반영하기 위해 네트워크의 입력을 순차적으로 넣게 되며 Temporal Invariance 특징에 따라 시간에 따른 출력을 얻게 된다.
[출처 | 딥다이브 Code.zip 매거진]