AI 머신러닝, 딥러닝

[딥러닝] 은닉층 활성화 함수, 손실함수, 경사하강법 종류

행니짱 2023. 9. 4. 16:29

<은닉층 활성 함수>

1. 시그모이드 함수 

 1/ ( 1+ np.exp(-z)) 

장점 : 입력값에 어떤값을 넣어도 0 ~ 1사이 값이 나옴

단점 : z값이 0에서 멀어질수록, 경사가 없어진다. 

신경망 - 경사하강법 사용 - 경사가 0이면, 가중치와 편향이 업데이트가 안되서 학습이 매우 느려짐 

= 기울기 소실 문제 (vanishing gradient problem)

 

2. tanh 함수 

np.exp(z) - np.exp(-z) / np.exp(z) + np.exp(-z) 

장점 : 입력값에 어떤값을 넣어도 -1 ~ 1사이 값이 나옴

단점 : 기울기 소실 문제 (시그모이드와 큰 차이 없음) 

 

3. ReLu 

max(0, z) 

z < 0 : 기울기 항상 0 

z > 0 : 기울기 항상 1 

장점 : 기울기 소실 문제 덜 일어남, 성능 good, 경사 계산이 훨씬 빠름(경사가 0 or 1), 은닉층 활성화 함수로 가장 많이 사용 

 

4. Leaky ReLu 

 

<출력층 활성 함수>

1. 시그모이드 = 이중 분류 

: 아웃풋 0 ~ 1 -> 분류할 때 확률적인 판단 가능 

: 확률을 모두 더하면 1이 넘어가 버린다. 

 

2. softmax = 다중 분류 

: z값 계산 -> e^z값 계산 -> e^z / 전체 e^z들의 합 

:확률의 합 항상 1

: e^ i번째 뉴런의 z값 / 모든 뉴런의 e^z값 

 

3. 선형함수 = 회귀 문제 

: z값을 그대로 예측값으로 사용 ex) 집값 

 

<손실함수> 

1. 회귀 문제 = > 평균 제곱 오차 

J(W) = (1/2m) * np.sum{(hwx - y) ** 2 }

y(i) = i번째 데이터의 실제값 

x(i) = i번째 데이터의 입력변수 

hw(x(i)) = i번째 데이터의 예측값 

 

2. 이분적 분류 => 크로스 엔트로피 (로그 손실) 

J(W) = -(1/m) * np.sum((Y*np.log(hw(X) ) + ((1-Y) * np.log(1-hw(X)))

y=1 일때 손실함수 / y=0일때 손실함수 

3. 다중분류 => 크로스엔트로피 (로그손실)

: 비슷하긴 한데, 분류 종류가 여러개 여서 여러개를 다 로그값 안에 넣어준다. 

= 실제 분류 데이터 빼고 다 사라짐 

J(W) = -(1/m)* np.sum(np.sum(Y * np.log(hw(X))

 

<경사하강법>

1. 배치(batch)경사하강법

: 한번 경사 하강을 할때 모든 학습 데이터 사용 

-> 시간이 너무 오래 걸림 

 

2. 확률적 경사 하강법

(stocastic gradient descent) 

: 한번 경사 하강을 할때 임의로 하나의 데이터만 사용 

-> 하강을 하는 방향이 가장 빨리 내려오는 방향이 아닐 수 있음 

-> 국소점 주변에서도 수렴하지 않고 맴돌 수 있음

내려오는 방향을 정할때 배치 경사하강법은 모든 데이터를 고려해서 천천히 방향을 결정하는 반면, 확률적 경사하강법은 빠르게 국소점을 향해서 이동한다. 

 

3. 미니배치 경사하강법

: 학습데이터를 같은 크기의 여러 데이터셋으로 만듦 

= 한번 경사하강법을 할때, 만들어둔 하나의 데이터셋(작은 배치)를 사용

 

 *  대부분 미니 배치 경사 하강법 사용