Deep learning의 4가지 Key point
Deep Learning 방법론
2012년 AlexNet : 컨볼루션 신경망(CNN)으로써 CNN의 부흥에 아주 큰 역할을 한 구조이다.
2013년 DQN : 강화 학습 가능한 심층 신경망을 이용한 인공지능
2014년 Encoder / Decoder : NMT(Neural Machine Translation)에 필요한 모델
2014년 Adam Optimizer
2015년 Gan
2015년 Residual Networks (ResNet) : 네트워크를 깊게 쌓을 수 있게 만들어준 학습 모델
2017년 Transformer
2018년 Bert
2019년 Big Language Models(GPT-X)
2020년 Self-Supervised Learning : 한정된 학습 데이터 외에 라벨을 모르는 데이터를 사용하여 학습
Neural Network는 인간의 뇌를 모방한 모델이다 / 함수를 근사하는 모델이다.
예시로 Linear Regression은 가장 간단한 뉴럴 네트워크라 할 수 있다. 입력과 출력이 1차원일때 입력과 출력을 연결하는 모델 즉 2개의 파라미터(weight, bias)를 찾는것이 목표이다. 즉 N개의 데이터를 잘 표현할 수 있는 모델을 찾는 것.
그렇다면 W와 B는 어떻게 구할까? Back Propagation을 통해 구한다. 즉 Loss function을 각각의 파라미터로 미분(편미분)하여 음수 방향으로 업데이트 하면 loss가 최소화하는 어떤 지점으로 수렴하게 될 것이다.
이런 식으로 W와 B를 업데이트하는 방법을 Gradient Descent라고 한다. 줄이고자하는 loss function에 대해서 파라미터에 대한 편미분을 구하고, 구한 편미분을 빼주는 것이다. 다시 말해, 마지막 최종 loss function 값을 전체 파라미터로 미분하는 것이 Back Propagation이고, 각 Back Propagation에서 나온 편미분 값을 업데이트 시키는 것이 Gradient Descent이다.
딥러닝은 뉴럴 네트워크를 깊게 쌓는 것이다. 한번 선형 결합이 반복되면 Nonlinear Transform을 거쳐 더 많은 표현력을 갖도록 한다.
Loss Function이 어떤 성질을 갖고 있고, 왜 내가 원하는 결과를 얻어 낼 수 있는지 알아야된다!
Regression Model들은 MSE를 loss function으로 사용한다. MSE로 학습을 할 수록 오류가 감소하는 것을 볼 수 있다.
Classification Model은 Cross Entropy를 사용한다. Vanishing Gradient와 느린 학습 속도를 방지할 수 있기 때문이다. 크로스 엔트로피 참고 사이트
마지막으로 Probabilistic에서는 MLE을 사용한다. 최대우도법 참고 사이트
파이토치를 사용하여 Multilayer Perceptron을 구현하여 MNIST 데이터를 학습시켰다. MLP 클래스를 만들어 초기화 함수와 foward 함수를 구현하였다. Loss function으로 Cross Entropy를 사용했고, optimize 알고리즘으로는 Adam을 사용했다.
1. Reset Gradient
2. Back Propagate
3. Optimizer Update
학습 과정을 거쳤다. 파이토치를 처음 사용하면서 함수가 다 구현이 되어있어 편리했다. 히든 레이어를 더 만들어 정확도가 올라가는지 실험해보자!!
부스트코스의 2주차이다. 1주차때 다 하지 못한 선택 과제를 이해하려고 노력했으나 역시 수학은 어렵다... 파이토치를 사용한 실습을 했고 코드 내용을 서로 상의했다. 강의를 듣고 그날 바로 학습 정리를 하니까 공부하는데 도움이 많이 된다.
피어세션
Batch Size가 클 수록 sharp minimizers이고, 작을 수록 flat mnimizer이다. 다시 말해 Batch의 사이즈가 작을 수록 Generation이 좋다.
Stochastic Gradient Descent
'Gradient Descent'란 네트워크에서의 결과값과 실제 결과값 사이의 차이를 나타내는 loss function의 최소화하기 위해 기울기(gradient)의 반대 방향으로 일정 크기만큼 이동하는 것을 반복하여 최소값을 찾아낸다. Stochastic Gradient Descent는 데이터의 모음(mini-batch)에 대해 loss function을 계산하여 계산의 속도를 높이는 장점이 있다.
Momentum
Momentum 방식은 Gradient Descent를 통해 이동하는 과정에 '관성'을 주는 것이다. 현재 Gradient Descent를 통해 이동하는 방향과 별개로, 과거에 이동했던 방식을 기억해 그 방향으로 일정 정도를 추가적으로 이동하는 방식이다.
Nesterov accelerated gradient
Momentum 방식을 기초로 하지만 Gradient를 계산하는 방식이 살짝 다르다.
Adagrad
파라미터가 얼만큼 변했는지 확인하여, 많이 변한 파라미터는 적게 변화시키고 적게 변한 파라미터는 많이 변화시킨다. 학습이 진행될 수록 학습이 멈춰지는 단점이 생긴다.
Adadelta
RMSprop
Adam
Momentum을 사용하고, adaptive하게 learning rate를 계산한다.
SGD, Momentum, Adam optimizer를 사용하여 학습된 모델을 plot하여 비교해봤다. Adam 알고리즘이 가장 좋은 성능을 보여주었다. Momentum과 learning rate을 사용하여 더 좋은 성능을 보여준거 같다. Momentum 알고리즘이 SGD보다 좋은 성능을 보여주었는데 이는 이전에 얻은 정보를 꾸준히 반영하는 효과가 있기 때문이다.
위 그림을 보면 피크가 큰 곳의 정확도가 매우 높게 나온다. 그 이유는 loss function을 MSE로 설정하였기 때문이다. 오차값이 더 클 수록 더 많이 계산해서 정확히 맞춘다.
Gradient Descent의 알고리즘의 변형 알고리즘을 학습해보았다. 다양한 알고리즘이 있으며 어떤 문제를 풀고 있는지에 따라 어떤 알고리즘을 사용하는지, 어떤 네트워크에 적용해야하는지 차이가 날 것이므로 실제로 실험해볼 필요가 있을 거 같다.
피어세션
CNN은 인간의 시신경을 모방하여 만든 딥러닝 구조 중 하나이다. Convolution을 통해 공간적인 특성을 유지하는 특징이있다. Convolution layer, pooling layer, fully connected layer로 이루어져 있다.
합성곱 연산은 두 함수 f, g 가운데 하나의 함수를 반전(reverse), 전이(shift)시킨 다음, 다른 하나의 함수와 곱한 결과를 적분하는 것을 의미한다. 출처: https://ko.wikipedia.org/wiki/%ED%95%A9%EC%84%B1%EA%B3%B1
Channel
컬러 사진은 색을 표현하기 위해 RGB 3개의 실수로 3차원의 데이터로 표현한다. 즉 3개의 채널로 구성된다. 반면 흑백 사진은 2차원 데이터로 1개의 채널로 구성된다. 높이가 39, 폭이 31인 컬러 사진은 (39,31,3)으로 표현되고, 흑백사진은 (39,31,1)로 표현된다.
Filter (Kernel)
이미지의 특징을 찾아내기 위한 파라미터이다. 일반적으로 (3,3) 또는 (5,5)와 같은 행렬로 정의한다.
Stride
움직인 간격을 의미한다.
Padding
행렬의 크기가 작아짐을 방지하는 것과, 이미지의 모서리 부분의 정보 손실을 줄이고자 이미지 주변에 0으로 채워 넣는 방법이다.
Convolution
35K = (11 x 11 x 3) x 48 x 2
307K = (5 x 5 x 48) x 128 x 2
884K = (3 x 3 x 128) x 2 x 192 x 2
663K = (3 x 3 x 192) x 192 x 2
442K = (3 x 3 x 192) x 128 x 2
Fully Connected Layer (Dense Layer)
177M = (13 x 13 x 128) x 2 x 2048 x 2
16M = 2048 x 2 x 2048 x 2
4M = 2048 x 2 x 1000
Fully Connected Layer(Dense Layer, Multi-Layer Perceptron)는 파라미터의 개수가 기하급수적으로 커진다. input의 파라미터 개수와 output의 파라미터의 개수를 곱한 것이므로 매우 커진다.
이미지에서 1개의 픽셀만 보고, 채널의 수를 줄여 파라미터의 개수를 줄인다.
참고
AlexNet
ReLu activation (overcome vanishing gradient problem), GPU, Data augmentation, Dropout, Local response normalization
VGGNET
3 x 3 convolution filter만을 사용했다.
왜? (3,3)을 2번 했을때와 (5,5)를 1번 했을때의 파라미터의 개수 차이가 있기 때문에 (3,3)을 2번 사용하는 것이 더 효율적이다.
GoogLeNet
1 x 1 convolution을 활용해서 파라미터의 개수를 줄인다.
ResNet
Identity map을 추가해서 더 많은 네트워크이 있어도 학습이 더 잘되게끔 하였다.
DenseNet
ResNet과 달리 더하지 않고 Concatenation을 한다. Dense Block과 Transition Block을 반복한다.
Semantic Segmentation(Dense prediction)은 사진에 있는 모든 픽셀을 해당하는 class로 분류하는 것이다.
Fully Convolutional Network
Fully Connected Layer를 없앤 이유로 마지막 Dense Layer를 거치고 나면 위치 정보가 사라지기 때문이다. Segementation은 위치 정보가 핵심이기 때문에 이는 심각한 문제이다. Transposed convolution을 통해서 낮은 해상도의 heat map을 업샘플링 해서 인풋과 같은 크기의 맵을 만든다. (단순히 분류만 했던 network가 fully connected layer를 제거 함으로서 semantic segmentation을 할 수 있고, heat map을 제작할 수 있는 가능성이 나온다)
Detection
Convolutional Neural Network (CNN) 알고리즘을 사용해서 MNIST 데이터를 학습시켰다. CNN은 MLP와 달리 레이어의 channel 수를 직접 정할 수 있다. 또한 마지막에 Dense Layer를 작성하므로 분류를 진행한다. 다시 말해 Convolution Layer를 거치고, 한 줄로 핀 다음에 Fully Connected layer를 거치는 과정이다.
CNN을 학습하는데 상당히 많은 부분이 헷갈렸다. 강의를 반복해서 듣고, 구글링 후 정리를 했더니 이해가 된다. AI를 공부하면서 처음 듣는 단어들이 상당히 많아 헷갈리는데 단어를 정확히 정의 하는 것이 매우 중요하다 생각이 된다.
마스터 클래스에서 '생활코딩'의 이고잉님의 깃을 배울 수 있었다. 깃을 알고 있긴 했지만 이고잉님의 강의를 듣고 더 정확히 알 수 있어 깃이 한결 편해졌다.
피어세션
Sequential Model
연속적인 데이터는 이미지보다 처리하는 과정이 매우 어렵다. 얻고 싶은 정보는 하나인데 데이터의 길이(차원)를 모르기 때문이다. 따라서 CNN 모델을 사용할 수 없다. Sequential Model은 입력이 들어오면 다으메 들어올 걸 예측하는 모델이다.
RNN
RNN은 시퀀스 모델이다. 입력과 출력을 시퀀스 단위로 처리하는 모델이다.RNN은 관련 정보와 그 정보를 사용하는 지점 사이 거리가 멀 경우 역전파시 그래디언트가 점차 줄어 학습능력이 크게 저하된다. 이를 vanishing gradient problem라고 한다. 이를 극복한 것이 LSTM이다.
LSTM
LSTM은 RNN의 히든 state에 cell-state를 추가한 구조이다. 덕분에 state가 꽤 오래 경과하더라도 그래디언트가 잘 전파된다. 이전까지의 정보를 현재 입력 바탕으로 지울지, 새롭게 쓸지를 결정하고, 두 정보를 취합(update cell)을 한다. Update Cell를 한번 더 조작을 해서 그 값을 밖으로 내보낼지 output gate를 통해 결정한다.
Gated Recurrent Unit
LSTM에 비해 파라미터의 수가 더 적어 성능이 좋다.
Transformer는 self-attention을 이용해 병렬 처리가 가능하게 만드는 모델이다. 모델은 어떤 한 언어로 된 문장을 받아 다른 언어로 번역을 내놓을 수 있다. Transformer의 구조는 크게 Encoder와 Decoder로 나눌 수 있고 encoder 안에는 여러개의 encoder를 쌓아 올리고, decoder 또한 여러개의 decoder를 쌓아 올린 것이다.
Encoder는 self-attention과 feed fowarde Neural Network로 구성되어 있다. 여기서 Self-Attention이 각 단어 사이의 관계성을 학습하는 과정을 거친다. 다시 말해 단어 사이의 dependency가 존재하는 반면 Feed Foward는 dependency가 없다. Self-Attention은 Query, Key, Value 3가지 벡터를 만들어낸다. Query 벡터 1개를 자신을 포함한 다른 모든 Key 벡터를 내적하여 score를 뽑아낸다. 계산한 score를 normalize와 softmax를 거쳐 value벡터와 곱하여 값들을 모두 더하면 최종 값이 된다.
Position encoding이라는 벡터를 추가하여 입력 값에 더하여 각 단어의 위치와 시퀀스 내의 다른 단어 간의 위치 정보를 줄 수 있다. Encoder의 최상위 층의 Key, Value 벡터를 그대로 Decoder에서 사용한다.
과제 복습하기!!
학습이 갑자기 어려운 느낌이 들었다. 학습을 하고 바로 바로 정리해야되는데 일이 있어 못했다... 처음 듣는 단어가 엄청 많다 보니까 힘든 하루였다.
피어세션
Generative Model은 단순히 이미지나 문장을 만드는 것에 그치지 않고 해당 데이터를 구분할 수 있다.
GAN(Genreative Adversarial Network)
위 사진을 보면, 위조 지폐를 경찰이 분별하고 이를 바탕으로 도둑은 경찰을 속이기 위해 더 치밀하게 위조지폐를 만든다. 이 과정이 Gan과 매우 비슷하다고 볼 수 있다. Discriminator가 이미지가 들어오면 진짜와 가짜를 구별해주는 경찰의 역할을 해주고, Generator가 랜덤코드를 받아 가짜의 이미지를 만드는 도둑 역할을 한다. GAN의 장점은 Discriminator와 Generator가 동시에 같이 학습을 하며 성능이 상승해 굉장히 좋은 이미지를 만들 수 있다.
9강과 10강에 있는 내용을 제대로 이해하지 못했다. GAN은 유투브를 통해 이해를 했지만 9강에 있던 수학 수식이 왜 나왔는지 어떤 연관이 있는지 잘 이해가 안간다.....
오늘의 피어세션은 다른 팀과 1시간 하면서 어떻게 하는지 알아봤다. 다른 조들은 따로 알고리즘 공부를 한다길래 좋은 거 같아 우리 조도하기로 했다. 다음 주 부터 부지런히 공부해야될거 같다! 화이팅하자!!!!!! 다음 주는 당일에 학습 정리를 하고 부지런히 살자!!
피어세션