본문 바로가기
Data Science/DL

[DL] - 딥러닝 강의 정리

by 호찌민 2021. 8. 20.

이번 포스팅은 김성훈 교수님의 '모두를 위한 딥러닝 강좌 시즌1'의 8~12강을 듣고 정리한 글입니다.

 

[DL Lec 08] - 딥러닝의 기본개념 : 시작과 XOR 문제

뇌의 뉴런이 동작하는 형태를 기계로 구현하는 것에서 시작되었다. 과거, AND GATE와 OR GATE를 선형으로 풀게 되면서, 가능성을 매우 긍정적으로 생각했다. 하지만, XOR GATE를 해결할 수 없게 되면서, 주춤하게 된다.

x1 x2 OR
0 0 0
0 1 1
1 0 1
1 1 1

         <OR GATE>

x1 x2 AND
0 0 0
0 1 0
1 0 0
1 1 1

         <AND GATE>

x1 x2 XOR
0 0 0
0 1 1
1 0 1
1 1 0

         <XOR GATE>

  • Backpropagation : 최종적으로 예측한 error를 구해서 학습을 시키자는 생각에서 시작되었다.
  • CNN의 기원 : 어떤 사진을 보여주었을 때, 뇌가 동작하는 것을 살펴보아하니 일부 부분들을 담당하는 신경망들이 조합되는 것이 아닌가라는 생각을 했다.
    • 사진을 부분부분 본 후, 다음 레이어로 보내어 최종적으로 합치는 것으로 동작한다.

[DL Lec 09] - XOR문제 딥러닝으로 풀기

<XOR GATE 풀기1>
<XOR GATE 풀기2>

XOR GATE는 가중치 벡터와 편향 벡터의 값이 위의 사진과 같은 값으로 나타낸다면, 해결할 수 있다. 물론, 위의 사진에서 주어진 가중치와 벡터 값 이외의 값을 이용해서도 XOR GATE를 풀 수 있다.


[DL Lec 10-1] - sigmoid보다 ReLu가 더 좋아

딥러닝의 층을 깊게 하려면, 각각의 weight와 bias를 주면 된다. 단, 이때 matrix 형태를 잘 맞추어 주어야 한다.

따라서, input과 output만 잘 설정하고 hidden은 마음대로 형태만 맞추면 된다.

*bias는 output 형태와 같은 형태를 가진다.

 

하지만, 층을 깊게하더라도 결과가 안좋게 나오는 경우는 왜 그럴까?

sigmoid gate를 통과하면 0~1 사이의 값만 곱해져서 작은 값이 되므로 순전파 (forward propagation)이 계속 될수록 값이 작아져서 0에 가까운 값이 되기 때문이다. 이런 경우를 vanishing gradient라고 부른다.

 

ReLU는 vanishing gradient를 해결하기 위해 등장했다.

  • Relu
    • $x , x >= 0 $
    • $0, x < 0 $
    • 다음과 같이 표현 가능함 -> $max(0, x)$

따라서 Neural Net에서는 ReLu를 사용하면 된다고 하셨다. 하지만, 마지막 layer의 출력을 위해서, 마지막 Activation (활성화 함수)는 sigmoid를 사용한다.

 

[DL Lec 10-2] - 초기화 잘 해보자.

  • 초기값은 0으로 주지마라.
    • Restricted Boatman Machine (RBM)을 이용 -> Deep Belief Nets
  • Restricted Boatman Machine (RBM)
    • Forward Propagation (순전파)의 값과 Back Propagation (역전파)의 값의 차이를 줄여가는 방법으로 weight를 구한다.
    • weight를 따로 설정하지 않고 RBM을 통해, weight를 구했다. (2006년 논문)
  • Xavier initialization
    • code : w = np.random.randn(fan_in, fan_out) / np.sqrt(fan_in)
      • fan_in : 이전 layer(input)의 노드 수, fan_out : 다음 layer의 노드 수 
    • Xavier Normal Initialization
      • $ W ~ N(0, Var(W)) $
      • $ Var(W) = \sqrt \frac{2}{n_{in} + n_{out}} $
        • $n_{in} : 이전 layer(input)의 노드 수, n_{out} : 다음 layer의 노드 수$
    • Xavier Uniform Initialization
      • $ W ~ U(-\sqrt \frac{6}{$n_{in} + {n_out}}, +\sqrt \frac{6}{n_{in} + {n_out}})$
        • $n_{in} : 이전 layer(input)의 노드 수, n_{out} : 다음 layer의 노드 수$
  • He's Initialization
    • code : w = np.random.randn(fan_in, fan_out) / np.sqrt(fan_in / 2)
      • fan_in : 이전 layer(input)의 노드 수, fan_out : 다음 layer의 노드 수
    • He Normal Initailzation
      • $ W ~ N(0, Var(W)) $
      • $ Var(W) = \sqrt \frac{2}{n_{in}} $
        • $n_{in} : 이전 layer(input)의 노드 수$
    • He Uniform Initialization
      • $ W ~ U(-\sqrt \frac{6}{$n_{in}}, +\sqrt \frac{6}{n_{in}})$
        • $n_{in} : 이전 layer(input)의 노드 수$

[DL Lec 10-3] - Dropout과 앙상블

  • Overfitting (과적합) : train dataset에 과하게 학습되어 새로운 data set에 성능이 낮게 나오는 현상
    • Layer를 상당히 깊게 한다면, Overfitting 가능성이 높아진다.
  • Overfitting 해결법
    • More training data : 더 많은 학습 데이터를 수집한다.
    • Regularization (정규화) : 모델에 규제를 주어 일반성을 띄게하는 방법
    • Dropout : Random 하게 뉴런들을 멈추는 방법
      • 단, 학습하는 동안에만 Dropout을 사용하고 모델을 평가하거나 모델을 사용할 때에는 Dropout한 것이 아닌 전체를 불러와야한다.
  • Ensemble : 똑같은 Neural Net을 여러개 만든 후, 학습을 시키고 합친다.

[DL Lec 11-1] - Conv Net의 Conv 레이어 만들기

  • Conv (Convolutional Network) : 전체 이미지 중 일부만 발췌한 것

<Start with image (width x height x depth)>

  • filter는 해당 크기만큼을 추출하여 한 장만 뽑아낸다.
    • *단, image의 depth와 filter의 depth는 같아야한다.
  • stride : 필터를 움직이는 칸의 크기
    • output size : (N-F) / stride  + 1
      • N : 이미지의 weight or height
      • F : 필터의 크기

<stride 예시>

  • padding : 기존의 weight, height 크기를 늘려주는 것
    • padding이 1이면, 위 아래 + 양 옆에 2씩 늘어난다. 
    • 그림이 급격히 작아지는 것을 방지함 (정보의 손실 방지)

<padding = 1인 경우>

  • image에 filter를 적용하는 횟수에 따라 결과 이미지가 달라진다.

<이미지와 필터>

[DL Lec 11-2] - Conv Net Pooling (sampling)과 Full Network

1 1 2 4
5 6 7 8
3 2 1 0
1 2 3 4

위의 표와 같은 이미지가 존재한다고 할 때, 필터의 크기가 2x2, stride가 2, max pooling을 적용한다면, 다음과 같은 결과가 나온다.

*max pooling은 필터를 적용할 때, 가장 큰 값을 추출하는 것이다. min pooling은 최소값 추출이 된다.

6 8
3 4

 


[DL Lec 12] - NN의 꽃 RNN 이야기

  • RNN : Recurrent Neural Net
  • Sequence data (series data) : 이전의 연산 or data가 영향을 미치는 것

<RNN>

  • $h_t = f_w(h_{t-1}, x_t)$
    • $h_t$ : new state
    • $f_w$ : same function with parameters $W$
    • $h_{t-1}$ : old state
    • $x_t$ : input vector same timestamp
  • $h_t = tanh(w_{hh}h_{t-1} + w_(xh)x_t)
    • *$f$가 $WX$라고 가정
    • 출력값은 지정한 $W$에 따라 갯수가 다르게 나온다.
  • $y_t = W_{hy}h_t
    • Notice : the same function and the same set of parameters are used at evrey timestamp

 

<character - level - language model example>

'Data Science > DL' 카테고리의 다른 글

[밑바닥부터 시작하는 딥러닝1] 퍼셉트론  (0) 2021.06.30