패스트캠퍼스 데이터분석 올인원 패키지 4주차 수강 후기입니다. 이번 주차는 머신 러닝 중 인공신경망을 활용한 기법인 딥러닝에 관한 강의였습니다.
1. Perceptron
: 생물학적 뉴런을 모방하여 만든 인공신경망의 기본 단위
위와 같이 a,b라는 input을 받아서 합친 뒤 activation function을 통과하여 최종 출력을 내보내는 것을 볼 수 있습니다.(이 결과는 다음 Perceptron(혹은 뉴런)으로 전달되거나, 최종 Output으로 출력됩니다.)
2. 딥러닝
: Deep Neural Network를 이용한 Machine Learning 방법
아래 그림과 같이, Neural Network는 Input Layer, Hidden Layer, Output Layer로 구성됩니다. Input Layer와 Output Layer는 하나지만, Hidden Layer는 여러개일 수 있고, Hidden Layer가 2개 이상일 때 Deep Neural Network이라고 합니다. Hidden Layer가 늘어날수록, 더 정교한 모델을 만들 수 있지만, 계산량의 증가와 Overfitting을 항상 주의해야 합니다.
* 각각의 Node들을 하나의 Perceptron이라고 생각하시면 됩니다.
3. Gradient Descent
1) Weight(가중치)
* 가중치 :
위의 그림의 Hidden Layer의 각 Node(동그라미)들은 모두 가중치라는 값을 가지고 있습니다. 이 값들은 각 Node들의 결과값에 곱해진 후 다음 노드로 전달됩니다. Neural Network는 데이터를 사용하여 이 가중치들을 최적의 값으로 Update하는 것이 목표입니다.
1.1) 가중치 초기화 #가중치의 초기값은 어떻게 설정할 것인가?
: 위에서 말했듯이, 가중치는 각 Node들의 결과값에 곱해집니다. 데이터를 사용하여 이 가중치의 값들은 Update(학습)되지만, 초기값을 설정해주는 것이 학습에 많은 영향을 끼칩니다. 예를 들어 0으로 Initialize 할 경우에는 뒤의 Node들로 전달되는 결과값들이 모두 0일 것이므로 학습이 되지 않을 것이고, 너무 큰 값으로 초기화하는 경우에도 학습이 제대로 되지 않을 수 있습니다. 가중치를 초기화하는데 주의해야 할 점은 가중치가 너무 작아져서 학습이 안되거나(Vanishing Gradient), 너무 커져서 학습이 안되는 경우(Exploding Gradient)를 방지해야 한다는 것입니다.
[1] Random Initialization : 말 그대로 Random하게 가중치를 초기화하는 것입니다. 하지만 가중치들을 말그대로 Random하게 초기화하는 것은 학습에 나쁜 영향을 미칠 수 있습니다. 따라서 Xevier Initialization이나, He Initialization등의 방법으로 적절한 분포를 가지는 범위 내에서 Random하게 가중치를 초기화하는 방법도 사용됩니다.
1.2) Loss Function(Cost Function)
: Input Layer, Hidden Layer를 거쳐 최종적으로 Output Layer에 도착한 결과값은, Loss Function이란 함수에 넣어져 실제 값과의 차이를 계산하게 됩니다. 이 결과값이 오차이고, 이 오차를 줄이기 위하여 Loss Function을 미분하여 Loss Function을 감소시키는 방향으로 가중치를 Update하는 것이 Gradient Descent 입니다.
4. Mini-Batch 학습법
:
Batch / Stochastic / Mini-batch GD
4.1) Batch Gradient Descent : 모든 Data에 대해서 Loss를 계산하여 다 더하고 이를 이용해서 Gradient Descent 진행
4.2) Stochastic Gradient Descent : Data를 1개만 뽑고, 그 Data에 대한 Loss가 대표값을 가진다고 생각하고 Gradient Descent 진행
4.3) Mini-Batch Gradient Descent : Batch/Stochastic의 중간 형태로 data를 n개 sampling한 뒤 그 n개 data에 대한 loss를 계산하여 다 더한 뒤 이를 이용하여 Gradient Descent 진행
5. back propagation : 역전파
Neural Network는 주어진 데이터를 활용하여 가중치를 Update함으로써 최적의 모델을 만듭니다. Output Layer에서 구해진 오차를 활용하여 가중치들을 Update해야 하는데, Update하는 방법이 역전파입니다. 역전파는 아래의 그림과 같이 각 단계별로 관계식을 구한 후 미분한 뒤, 이 미분값들을 모두 곱하여 Loss Function을 가중치로 편미분한 값을 구할 수 있습니다.
6. overfitting(과적합) :
모델을 학습시킬 때 일반적으로 데이터셋을 train, validation, test라는 세가지 데이터셋으로 나눕니다. Training set으로 학습시킬 때의 Error를 training error, Test Set의 데이터를 입력했을 때의 오차를 test error라고 하는데, 이 두가지 변수는 항상 동일한 것은 아닙니다. (이상적으로는 Training Error와 Test Error가 동일해야 합니다.)
Training Set을 활용하여 학습하는 동안 training error가 너무 낮아지면, 모델이 새로운 데이터(Test Set)에 대해 반응을 못하여 test error가 높아질 수 있습니다. 이런 경우를 overfitting이라고 합니다. 이와 반대로 아예 학습이 잘 되지 않아 Training Error가 높은 경우를 underfitting 이라고 합니다.
7. CNN
convolutional network는 컴퓨터비전에 활용되는 Deep Neural Network입니다.
Input 데이터를 convolution layer - pooling layer - fully connected layer를 통과시켜 최종 분류합니다.
8. Recurrent Neural Network
* Sequence is important ! : 사람의 말을 해석할 때, 아래 글과 같이 앞뒤의 문맥을 이해하고 있는 것이 중요합니다. 아래 사진의 두 문장을 보았을 때 뒤의 문장은 동일하게 '이 영화 꼭 보세요!' 지만, 앞의 내용에 따라 완전히 다르게 해석될 수 있는 것을 알 수 있습니다. 이처럼 자연어 처리에서 언어를 해석할 때, 문맥이란 개념을 도입하기 위해 사용하는 Neural Network이 RNN입니다.
RNN은 아래 그림과 같이 Network들이 Sequence를 가지고 연결되어 있습니다. 이런 방식으로 앞의 해석 결과가 뒤의 해석 결과에도 영향을 미칠 수 있는 것입니다.
하지만 RNN은 아래와 같은 문제들을 가지고 있고, 이 문제들을 해결하기 위한 방법들도 어느정도 제시되어 있습니다.
문제 )
1. Sequence가 길어지면 성능이 떨어진다.
2. Sequence가 길어지면 학습이 잘 안된다.
3. 오래전 입력에 대해서는 기억을 잘 못한다.
-> 해결방법 LSTM, GRU
LSTM(Long Short Term Memory)
GRU(Gated Recurrent Unit)
( 자세한 내용은 https://blog.naver.com/koys007/221528966460 를 참고하세요.)
9. GAN(Generative Adversarial Network)
비지도학습의 한 종류로, 서로 대립하는 두 신경망(모델)을 경쟁시켜서 좋은 성능을 얻어내는 Deep Learning Algorithm 입니다. 아래 그림과 같이 하나의 생성 모델, 하나의 분류 모델이 있다고 가정해봅시다. 생성모델에서는 가짜 지폐 데이터를 생성하고, 분류모델에서는 이 데이터를 진짜/가짜로 분류합니다. 이 과정을 계속 반복하면서, 점점 더 정교하게 성능을 향상시키는 것입니다.
(자세한 내용은 https://m.post.naver.com/viewer/postView.nhn?volumeNo=16566740&memberNo=36733075&vType=VERTICAL를 참고하세요.)
10. Tensorflow vs Pytorch
Deep learning 의 대표적인 두가지 Framework로 특이사항은 아래와 같습니다. 저는 쓸데없는 고민을 정말 많이 하는 편인데요, 언어든 프레임워크든 고민하지 말고 아무거나 유명한 것들 중 하나를 제비뽑기로 뽑아서 빨리 시작해보는 것이 제일 좋은 방법 같습니다. 이것으로 4주차 학습일지를 마칩니다.
'데이터 사이언스 > 패스트캠퍼스' 카테고리의 다른 글
[패스트캠퍼스 학습일지] 데이터분석 올인원 패키지 _ 6주차 : 데이터 분석가 (0) | 2019.10.20 |
---|---|
[패스트캠퍼스 학습일지] 데이터분석 올인원 패키지 _ 5주차 : 데이터 엔지니어링 (0) | 2019.10.05 |
[패스트캠퍼스 학습일지] 데이터분석 올인원 패키지 _ 3주차 : 머신 러닝 (0) | 2019.09.25 |
[패스트캠퍼스 학습일지] 데이터분석 올인원 패키지 _ 2주차 : 기초 통계 (0) | 2019.09.25 |
[패스트캠퍼스 학습일지] 데이터분석 올인원 패키지 _ 1주차 : 우리는 왜 데이터 분석을 배워야 할까? (0) | 2019.09.25 |