iflearn의 CNN 완벽가이드를 새로 시작했습니다. 초반 강의는 딥러닝 수학 강의 내용과 겹쳐서 내용은 생략했습니다.
활성화 함수 part부터 업로드 합니다.
활성화 함수는 사용하는 이유는 비선형성으로 만들기 위함이다. 활성화 함수가 없다면 선형함수로써 왼쪽처럼 구분이 된다. 하지만 오른쪽 처럼 비선형이 적용되면 과적합 문제가 발생하기 쉽다. 활성화 함수 별 사용용도를 아래 그림을 통해 확인한다.
각 활성화 함수별 사용 용도가 각각 다르다.
*Sigmoid 함수 특성
X값이 양으로 100 이든 1000이든 출력은 1로 수렴이 된다. X값이 음수로 -100이든 -1000이든 출력은 0으로 수렴이 된다. 이때 sigmoid의 미분를 표현한 파란색 분포를 보겠다. X가 음수든 양수든 커질수록 어찌됐든 1과0으로 수렴하기 때문에 양쪽 사이드가 감소하는 모양을 띈다. 미분은 "내가 변했을때 넌 얼만큼 변해?" 의 양을 나타낸다. 다시말해 X가 얼마나 커지든 작아지든 나는 0과 1로만 수렴하기 때문에 변화의 한계가 존재한다. 이로인해 Vanishing Gradient 문제가 발생하게 된다.(은닉층으로 사용할 시)
시그모이드를 미분하면 0이 출력되는 현상때문에 위 그림처럼 층이 깊어질수록 Gradient값이 점점 사라지게 된다.
그래서 시그모이드는 이진분류를 수행할때 주로 사용된다. 왼쪽 선형식으로는 1과0으로 구분하기가 쉽지 않다. 이를 시그모이드를 통해 확률 0.5를 기준으로 1과0으로 분류할수 있다.
*Hyperbolic Tangent 함수 특성
시그모이드와는 달리 -1~1사이의 값을 취급하지만 같은 문제점을 안고 있다. X값에 따라 결국은 수렴을 하기때문에 vanishing이 발생한다.
*ReLU(Rectified Linear Unit)함수 특성
입력값이 0보다 작으면 0으로 출력하고, 0보다 크면 수렴이 하지 않고 똑같이 출력한다. 그래서 오른쪽 그림의 미분이 0으로 떨어지지 않고 1을 반환한다.
*SoftMax함수 특성
시그모이드는 0.9이면 "1"이라고 값을 "하나만" 출력해준다. 반면 소프트 맥스는 이를 여러개로 반환할수 있다. 위 그림처럼 output layer를 소프트맥스에 넣게 되면 그에 맞는 확률값으로 반환해준다. 반환된 확률 값중 가장 큰 값을 선택하여 클래스를 결정한다.
*Cross Entropy Loss
분류일 경우엔 예측값과 실제값 사이의 Cross Entropy를 구하여 Gradient Descent를 계산한다. 위 그림의 하단 식에서 i는 data의 건수를 의미한다. ex) 첫번째 이미지는 i=1로 표현할수 있겠다. 따라서 m은 데이터의 건수를 의미한다. Loss를 보면 m으로 나누기 때문에 Cross entropy의 평균을 Loss로 사용하고 있음을 알수있다.
하단을 먼저 보면, output layer에서 위 처럼 값이 들어오고, 이를 softmax을 통과하면 가장 큰 확률값의 인덱스를 통해 클래스를 결정하게 된다. 이때의 Loss를 구하는 것은 아래 식을 통해 자세히 보겠다.
C는 class의 갯수이다. 예를들어 고양이 부터 강아지까지 5종류의 동물을 나타낸다. 이때, CE의 값은 위 식처럼 계산된다. 식을 통해 알수 있는 점은 0인 클래스, 즉 정답이 아닌 클래스는 모두 더해봤자 log0=0이므로 0이다. Loss는 오직 Class=1일때 구할수 있다.
---
왼쪽 그래프에서 값을 크~게 잘못 예측하게 되면 loss 값 또한 커지는 걸 볼수있다.
시그모이드는 0 or 1 이진 분류를 나타내고자 할때 사용된다. 만일 0.7이라는 예측값을 얻었을때의 loss는 얼마인가를 생각해 보자. 이진 분류이기 때문에 두가지 경우로 생각해 볼수 있다. 실제 값이 1인 경우와 0인 경우 일것이다. 실제값이 1일때의 loss 값, 실제값이 0일때의 loss값을 알아내야 한다. 그래서 식이 softmax 와는 조금 다르다. 실제값이 1이라면
뒤에 있는 값이 0이 될것이다. 1-1 = 0 이니까. 반대로 실제값이 0이라면
위에 해당 부분이 0이 되고 뒷부분 식에서 loss값을 구할수 있게 된다.
'Data Diary' 카테고리의 다른 글
2021-10-04,05(딥러닝 CNN_기본 특징 설명) (0) | 2021.10.04 |
---|---|
2021-09-30(딥러닝 CNN 2_Optimizer) (0) | 2021.09.30 |
2021-09-28(따릉이 프로젝트 완성하기 9) (0) | 2021.09.28 |
2021-09-25(Learn github) (0) | 2021.09.25 |
2021-09-22(따릉이 프로젝트 완성하기 8) (0) | 2021.09.22 |