반응형

순전파 (Forword Propagation)

  • Input에서부터 Output이 나올때까지 순서대로 계산을 하는 과정
  • loss를 구하려면 실제값이랑 Output (H(x))의 차이를 알아야 한다.
  • loss를 구할 수 있다
  • 모델을 론칭을 하면 학습은 안하고 추론(예측)만 함 → 모델 추론

 

 

역전파 (Back Propagation)

  • 딥러닝에서 제일 중요한 개념★
  • 학습하는 과정에서만 사용된다.
  • 순전파와 반대로 출력층에서 입력층 방향으로 계산하면서 가중치를 업데이트 한다.
왜 반대로 가는가??
학습을 할 때 가중치를 업데이트를 하는데 만약 순전파라면 Input에서 wieght를 바꾸고 바꾼 wieght를 Hidden Layer에서 또 바꾸고 Output에서 또 바꾸는데 그러면 Output에서 loss 차이가 너무 많이 날 수 있음 !!
→ loss를 Output에서 구하는데 Input에서부터 바꾸게 되면 Hidden Layer에서 가중치를 업데이트하기 위해서는 옵티마이저를 학습하는 과정에서 미분이 있는데 그 다음층 (Output)에 미분결과가 필요한데 그 다음층 미분 결과를 알 수가 없기 때문에 순방향으로는 가중치 업데이트를 못함 !!!
→ 이 문제를 해결하기 위해 위에서부터 가중치를 미분을 해서 업데이트한 후 그 값이 그대로 내려가서 또 업데이트 하고 업데이트 하면서 가중치를 반대방향으로 업데이트를 하는 아이디어를 고안해내서 역전파가 생김
→ 층이 아무리 깊어져도 학습을 할 수 있다.
  • Gradient Descent를 활용하여 학습을 할 경우, 다음 층의 미분값이 필요하게 되는데, 현재 층에 연산이 끝나지 않아서 다음 층의 미분 값을 알 수가 없는 문제를 해결하기 위해 나옴

 

 

활성화 함수

활성화 함수 (activation function)

  • 뉴런에서 출력값을 결정하는 함수
  • 실제 뇌를 구성하는 신경 세포 뉴런이 전위가 일정치 이상이 되면 시냅스가 서로 화학적으로 연결되는 모습을 모방한 함수
    (좀 더 풀어서 설명) 실제 뇌에서는 뉴런이 전위(전기신호)에서 일정 세기 이상이 되면 시냅스가 서로 연결되면서 1이라고 하고, 아닌 경우 0이라고 하는걸 모방을 한다.
  • 만약 선형함수라면?? Wx라고 가정을 한다면 결국 층을 세번을 거치면 아래 수식처럼 나오고 그럼 W의 세제곱짜리 층 한개가 있는 거랑 W짜리 층 세개 있는거랑 똑같은 결과가 나와기때문에 층을 아무리 쌓아도 의미가 없어지기 때문에 선형함수는 사용 불가능하다.
    → 반드시 비선형 함수를 사용해야함

아무리 은닉층을 추가해도, 선형함수는 Weight만 곱해지는 효과라서 그럼 층이 세개일때는 세제곱으로 Weight가 가지고 있는 층 하나로 대체 가능하기 때문에 결국에는 의미가 없어져서 선형함수로는 활성화 함수를 쓸 수 없음

 

계단함수 (Step Function)

  • 제일 기본적이고, 실제로는 전혀 사용하지는 않음
  • 0보다 클 때는 1 , 0보다 작을 때는 0
  • 선이 하나는 아니기 때문에 비선형 함수이다.

반응형

시그모이드 함수(Sigmoid Function)

  • logistic regression 에서 활용했던 함수
  • 시그모이드 함수 하나만 쓰면 결국 로지스틱 회귀랑 똑같은게 된다.
    → 층 하나에 그 층에서 시그모이드 함수만 활성화 함수로 쓰게 된다면 로지스틱 회귀랑 똑같아지는 효과
XOR-1 실습 때(바로 전 포스팅), 층 하나만 놓고 시그모이드를 작성을 해서 모델에 넣었는데 그게 바로 로지스틱 회귀이다. 
시그모이드 함수를 여러개 쌓으면 로지스틱 회귀를 여러개 쌓은것이 됨 (그래서 중요)

  • 활성화 함수가 거치기 직전까지가 선형함수라고 생각하면 됨
    → 퍼셉트론에서 Wx + b 가 활성화 함수를 거치면서 시그모이드로 바껴서 로지스틱 회귀처럼 그래프가 바뀌는 것 때문에 로지스틱 회귀에 시그모이드 함수를 쓰는 경우

  • Sigmoid 함수는 0 또는 1에 가까워지면 그래프의 기울기가 완만해지고, 주황색 부분은 기울기가 0에 아주 가깝고 그러다 보니 역전파 과정을 거치면서 뒤에서부터 미분한 값을 앞에서 곱하는게 되는데 그런 과정을 거치다 보니 앞단에는 기울기가 잘 전달되지 않는 문제가 발생함!
    → 그 문제 : Gradient Vanishinng Problem

 

Gradient Vanishinng Problem ★

  • 시그모이드 같은 함수를 쓰게되면 기울기가 완전히 0에 수렴하게 되면서, 역전파하는 과정에서 앞으로 갈수록 기울기가 제대로 전달이 안되면서 0에 매우 가까운 값이 계속 곱해서 넘어가다보니 Weight 가 제대로 학습이 잘 안된다.
    → Gradient가 점점 사라지고 있는 문제임
  • Sigmoid 뿐만 아니라 tanh나 activation function(활성화 함수)도 시그모이드랑 비슷하게 생겨서 함수를 거치면서 출력이 점점 작아짐
  • 네트워크가 깊어질수록 더욱 심각해지는 현상이 있음
  • ReLU와 같은 activation function을 활용하면 많이 완화되는 효과가 있음

 

하이퍼볼릭탄젠트 함수 (Hyperbolic Tangent Function) - tanh

  • Sigmoid 함수랑 생긴건 똑같은데 기울기가 조금 다름 → 시그모이드는 0과1 이지만, 하이퍼볼릭찬젠트는 -1과 1 사이다
  • 시그모이드 함수보다는 적지만, 유사하게 gradient vanishing 문제 발생

 

렐루 함수(ReLU)

  • Sigmoid 함수와 tanh에서 해결못한 gradient vanishing 문제를 해결하기 위해 0보다 클때는 선형으로 0보다 작을 때는 0을 줌
  • 양수값에선 특정 값에 수렴하지 않아, 시그모이드 함수나 하이퍼볼릭탄젠트에 비해 더 잘 동작하며, gradient vanishing 문제도 많이 사라짐,, 연산도 간단하여 속도도 훨씬 빠름
  • 입력값이 음수이면 기울기가 0이 되어, 뉴런이 회생할 수 없다는 뜻의 죽은 렐루(dying ReLU)현상

 

리키 함수(Leaky ReLU)

  • ReLU를 보완하기 위한 ReLU 함수의 변형
  • 기울기가 다르되 입력값이 음수일땐 조금씩 변경하고 음력값이 양수 일 때는 크게 변경함 → 입력값이 작을때는 작게 새는 것 같은 느낌으로 값을 변형한다고 해서 Leaky 함수라고 함

 

 

Softmax 함수

  • 분류를 위해서 사용하는 함수
    → XOR-2 예제에서 앞의 Layer를 ReLu를 썼고 뒤의 Layer에서 softmax를 썼음
    → 마지막에 분류하는 Layer에서 활용되는 활성화 함수
  • 분류해야하는 정답의 개수를 k라고 할 때, k차원의 벡터를 입력받아 각 클래스에 대한 확률을 추정

→ z에 예측값들이 다양하게 나오는데 그것이 softmax Layer를 거치면 다합쳐서 1이 되도록 변경이 됨

→ 그래서 실제값은 0 1 0인데 z에서는 이상한 값이 나왔을꺼임,, 어쨋든 두번째가 0.7로 쓰기 때문에 z에서도 두번째가 제일 크긴 했을텐데 마이너스 값도 많이 나오고 하다보니 그것들을 다 합쳐서 분류에 대한 클래스에 대한 확률을 다 합쳐서 1로 만들어주도록 변경해주는 것

→ 분류에서는 softmax를 거친값이랑 실제값이랑 cross entropy 함수로 loss function을 구해준다.

반응형

+ Recent posts