1. 딥러닝 개념 정리

1) 신경망과 퍼셉트론

  1. 신경망
    인간의 뇌에 복잡하게 얽혀 있는 1000억 개에 가까운 신경계 뉴런

  2. 퍼셉트론
    뇌의 신경망 구조에서 착안된 형태를 띔. 이를 연결한 형태를 인공신경망(Artificial Neural Network)라고 부름

2) 퍼셉트론

  • 2개의 레이어로 된 퍼셉트론(노드와 노드를 연결하는 부분 생각하기)
  • 은닉층엔 H개의 노드가, 출력층엔 K개의 노드가 존재함.
  • parameter(=weight, 단 weight는 bias도 포함함): 입력층과 은닉층, 은닉층과 출력층 사이에는 존재하는 행렬

✔✔✔🤔
Neural network에서 bias의 역할 (bias와 가중치 구분할 것..)
출처

  • bias은 입력층, 은닉층에 존재.
  • bias가 없을 경우 activation 함수의 steepness가 변형될 수 있다. bias가 있는 경우엔 activation 함수가 변형없이 좌표상의 위치를 옮길 수 있도록 해준다.
  • linear function(y = ax + b)에서의 b의 역할과 비슷하다고 이해하면 쉬움

3) 활성화 함수와 손실 함수

  1. 활성화 함수
    보통 비선형 함수를 사용함. 비선형 함수를 MLP 안에 포함시키면 모델의 표현력이 상승함.
    레이어 사이에 비선형 함수가 포함되지 않을 경우 한 개의 레이어로 이뤄진 모델과 MLP의 차이가 없어진다.
  • 종류 사진 출처

    • sigmoid

      σ(x)=11+exσ(x)=\frac 1 {1+e^{-x}}

      ✔✔✔🤔 참고
      자연 상수의 제곱

      np.exp(-x)
      • ReLU보다 쓰임이 적다.
    • Tanh

      tanh(x)=exexex+extanh(x) =\frac {e^{x} − e^{−x}} {e^{x} + e^{−x}}

      • 함수의 중심값을 0으로 옮김. sigmoid가 최적화 과정에서 느려지는 문제를 해결함
      • 여전히 vanishing gradient 문제 존재
    • ReLU (Rectified Linear Unit)

      f(x)=max(0,x)f(x)=max(0,x)

      • sigmoid, tanh에 비해 학습이 빠름
      • 연산 비용이 크지 않고 구현이 간단함
  1. 손실 함수
    정답과 활성화 함수를 가진 은닉층으로부터 얻은 정보 사이 차이를 계산하는 데에 사용되는 함수
    (차이를 계산하고 파라미터를 조정하는 것이 딥러닝의 전반적인 학습 방법)
  • 종류
    • 평균제곱오차(Mean Squre Error)
    • 교차 엔트로피(Cross Entropy)

4) 경사하강법

오차를 구한 후 오차를 줄이기 위해 시행하는 방법. 각 단계에서의 기울기를 구해 해당 기울기가 가리키는 방향으로 이동하는 방법이다.

  1. 학습률 Learning Rate
    경사를 내려갈 때 기울기 값에 곱해주는 값
  • step이 클 경우: overshooting을 방지하기 위해선 값을 잘 정해줘야함
  • step이 작을 경우: 시간 소요가 커짐
  1. 계산 방향성
    파라미터 W의 변화와 맞물리는 오차 L의 변화량을 구하려고 함. 이때 오차 기울기가 커지는 방향의 반대 방향으로 파라미터를 조정하면 됨. 이때 learning rate는 지나친 조정을 막는 역할을 할 수 있음.

5) 오차역전파법(Backpropagation)

출력층의 결과와 target 사이의 차이를 구함. 여기서 구한 오차값을 각레이어를 지나며 역전파해가며 각 노드가 가진 변수를 갱신하는 방법을 사용함.

2. 회고

이제까지 배운 딥러닝 알고리즘을 numpy로만 구현해서 원리를 알아보는 시간을 가졌다. 문제는 numpy에 익숙하지 않아서 이것도 이해를 잘 못한 거 같다. 그래도 딥러닝을 이해하는 데에 있어서 꼭 필요한 개념을 숙지할 수 있는 기회가 되었다. 앞으로 모델을 구축하는 데 있어서 어느 부분에서 오류가 났을지 생각해보는 과정이 조금은 더 수월해질 거 같다.

profile
🐬 파이썬 / 인공지능 / 머신러닝

0개의 댓글