dl 14

[Deep Learning] 어텐션 메커니즘 (Attention Mechanism) 아이디어 이해하기

전 포스팅에서 seq2seq에 대해 정리했습니다. (https://kingnamji.tistory.com/28) seq2seq의 인코더가 context vector를 만들 때 정보의 소실이 일어나는 점을 확인했습니다. 이번 포스팅에서는 깊은 내용보다는 아이디어에 주목해 최대한 이해에 집중하겠습니다. 아이디어 어텐션(Attention)은 말 그대로 필요한 정보에 주목해 그 정보로부터 sequence 변환을 수행하는 구조입니다. 어텐션 매커니즘은 기계번역을 위한 seq2seq모델에 처음 도입됐습니다. 예시 필요한 정보에만 주목한다는 점을 seq2seq모델을 만들 때 사용한다고 하고 예시를 들어 봅시다. 한국어 "나는 고양이를 좋아한다."를 영어 "I like cats"로 번역한다면, 'cats'를 예측할 때..

[Deep Learning] seq2seq (Encoder - Decoder)

RNN을 응용한 seq2seq에 대해 정리하겠습니다. seq2seq seq2seq(sequence to sequence)는 이름 그대로, 어떤 Sequence(시계열 데이터)를 입력 받아 다른 Sequence(시계열 데이터)로 mapping(변환)하는 방법입니다. 일반적인 RNN에서는 입력과 출력 sequence의 크기가 고정됐었지만, (입력 sequence의 크기는 패딩을 통해 동일한 크기로 만들어 주는 처리를 했었습니다.) 기계 번역이나 음성 인식과 같은 분야에서는 각 sequence에 대한 길이를 미리 알 수 없고, 가변적인 출력 sequence에 대한 처리가 필요합니다. 이런 문제의 해결을 위해 seq2seq을 사용합니다. 구조 seq2seq의 구조 예시입니다. 입력 'ABC'를 받아 'WXYZ'..

[Deep Learning] LSTM 개념 정리

전 포스팅에서 RNN에 관한 기본적인 내용을 정리하고, 마지막에는 문제점까지 알아봤습니다. https://kingnamji.tistory.com/26 [Deep Learning] RNN 개념 정리 순환 신경망이라고 부르는 RNN에 대한 내용을 정리해보겠습니다. RNN RNN은 Recurrent Neural Network의 줄임말로, 순환하는 신경망이라고 직역할 수 있습니다. (Recursive Neural Network, 재귀 신경망과는 다른. kingnamji.tistory.com 이번에는 LSTM(long short-term memory)에 대해 정리해보겠습니다. LSTM의 구조 아래의 그림은 RNN과 LSTM의 구조를 나타냅니다. RNN은 하나의 hidden state만을 갖고있습니다. LSTM은 ..

[Deep Learning] RNN 개념 정리

순환 신경망이라고 부르는 RNN에 대한 내용을 정리해보겠습니다. RNN RNN은 Recurrent Neural Network의 줄임말로, 순환하는 신경망이라고 직역할 수 있습니다. (Recursive Neural Network, 재귀 신경망과는 다른 신경망입니다.) RNN은 음성이나 문자처럼 순차적으로 나타나는 Sequence data(시계열 데이터)에 적합한 모델로 알려져있습니다. 구조를 보면서 왜 그런지 생각해봅시다. RNN의 기본 구조 RNN의 기본 구조입니다. 시계열 데이터 $(x_0, x_1, \dots, x_t, \dots)$ 가 RNN 계층에 입력되고, $(h_0, h_1, \dots, h_t, \dots)$ 가 출력되는 것을 표현하고 있습니다. 그림을 보면 출력이 두개로 분기 돼 하나는 그..

[Deep Learning] 10. CNN, 풀링 계층 (Pooling Layer)

이 전에 합성곱 계층(Convolution Layer)에 대해 알아봤습니다. https://kingnamji.tistory.com/24 [Deep Learning] 9. CNN, 합성곱 계층, 패딩, 스트라이드 앞 포스팅에서 CNN에 합성곱 계층(Convolution Layer)과 풀링 계층(Pooling Layer)이 사용되는 것을 확인했습니다. 이번에는 합성곱 계층의 연산과 패딩(Padding), 스트라이드(Stride)에 대해 알아보겠습니다. kingnamji.tistory.com 풀링 풀링 계층(Pooling Layer)에서는 풀링 연산이 이뤄집니다. 합성곱 계층의 출력 데이터를 입력으로 받아서 출력 데이터의 크기를 줄이거나 특정 데이터를 강조하는 용도로 사용됩니다. 풀링 연산은 쉽게, 가로, 세..

[Deep Learning] 9. CNN, 합성곱 계층, 패딩, 스트라이드

앞 포스팅에서 CNN에 합성곱 계층(Convolution Layer)과 풀링 계층(Pooling Layer)이 사용되는 것을 확인했습니다. 이번에는 합성곱 계층의 연산과 패딩(Padding), 스트라이드(Stride)에 대해 알아보겠습니다. 합성곱 연산 합성곱 계층에서는 합성곱 연산을 처리합니다. 합성곱 연산은 예시를 보면 바로 이해가 됩니다. $\circledast$ 은 합성곱 연산을 나타냅니다. 예시에서 합성곱 연산의 왼쪽이 입력 데이터이고, 오른쪽이 필터(또는 커널이라고 부릅니다.)입니다. 그림과 같이 합성곱 연산은 입력 데이터에 필터를 적용합니다. (합성곱 계층에서는 데이터를 특징 맵(Feature Map)이라고 부르기도 합니다. 입력 데이터는 입력 특징 맵, 출력 데이터는 출력 특징 맵이라고 부..

[Deep Learning] 8. 합성곱 신경망, CNN의 구조

이번 포스팅에서는 합성곱 신경망(Convolutional Neural Network), CNN의 구조를 알아보겠습니다. CNN은 신호 처리, 이미지 인식, 음성 인식 등 다양한 분야에서 사용됩니다. FCN CNN의 구조를 보기에 앞서 완전연결 신경망(Fully Connected Network)의 구조의 예시입니다. Affine 계층과 활성화 함수를 조합한 구조입니다. 문제점 이미지를 인식 알고리즘을 만드는 경우에 FCN을 사용한다면 이미지가 갖는 데이터의 형상이 무시됩니다. 가장 많이 나오는 예시인 MNIST 손글씨 데이터의 경우 (28, 28)의 형상을 갖는 이미지지만, FCN에 적용하려면 (28,28)의 형상을 한줄로 세워 (784)의 형태로 만들어 Affine 계층에 입력합니다. 그렇게 되면 공간적..

[Deep Learning] 7.시그모이드 함수 역전파 (미분, 구현)

시그모이드(Sigmoid) 함수의 수식은 아래와 같습니다. $y = \frac {1}{1+e^{-x}}$ 시그모이드 계층의 순전파는 위의 식을 그대로 구현하면 되고, 역전파를 위해 시그모이드 함수의 미분을 정리해보겠습니다. $\frac{\partial{y}}{\partial{x}} = \frac{\partial(1+e^{-x})^{-1}}{\partial{x}} \\ ~~~~~ = (-1) \frac{1}{(1+e^{-x})^2}(1+e^{-x})' \\ ~~~~~ = \frac{e^{-x}}{(1+e^{-x})^2} = \frac{1 + e^{-x} - 1}{(1+e^{-x})^2} \\ ~~~~~ = \frac{1+e^{-x}}{(1+e^{-x})^2} + \frac{-1}{(1+e^{-x})^2} ..

[Deep Learning] 6. 경사 하강법, 기울기

전 포스팅에서 수치 미분을 통해 함수의 기울기를 구했습니다. 이번에는 손실 함수의 기울기를 구하고, 경사 하강법을 통해 손실 함수가 최소가 되는 최적의 매개변수 값을 찾을 때까지 가중치를 갱신해보겠습니다. 이 전의 포스팅과 같이 구현과 관련된 내용은 제 깃허브 링크를 참고해주시기 바랍니다. https://github.com/Kingnamji/BigAI/blob/main/%EB%B0%91%EC%8B%9C%EB%94%A51_re/04_NNTrain.ipynb 기울기 변수가 여럿인 함수 (다변수 함수)에 대해 특정 변수를 제외한 나머지 변수를 상수로 간주하고 미분하는 것을 편미분이라고 하고, 모든 변수에 대한 편미분을 좌표로 갖는 벡터를을 기울기(gradient)라고 합니다. (이전 포스팅 내용) $f(x_0..

[Deep Learning] 5. 배치, 미니배치, 수치 미분, 기울기

전 포스팅에서 신경망 학습과 손실 함수에 대해 알아봤습니다. 이번에는 미니배치, 수치 미분, 기울기에 대해 다뤄보겠습니다. 이 전의 포스팅과 같이 구현과 관련된 내용은 제 깃허브 링크를 참고해주시기 바랍니다. https://github.com/Kingnamji/BigAI/blob/main/%EB%B0%91%EC%8B%9C%EB%94%A51_re/04_NNTrain.ipynb 미니배치 신경망의 학습은 훈련데이터로부터 이뤄진다고 했습니다. 학습동안 훈련데이터에 대한 손실 함수의 값을 구하고, 그 값을 최대한 줄여주는 매개변수를 찾습니다. ( 이 내용은 https://kingnamji.tistory.com/18 에서 다뤘습니다. ) MNIST 데이터셋의 경우 훈련 데이터의 갯수가 60,000개 입니다. 이렇게..