He 초기화 방법은 활성화 함수로 ReLU를 쓸 때 활성화 결괏값들이 한쪽으로 치우치는 문제를 해결하기 위해 나온 방법이다.
He 초기화 방법은 앞 레이어의 노드가 n개일 때 표준 편차가 \sqrt{2} / \sqrt{n}인 분포를 사용하는 것이다. 즉 표준 정규 분포를 입력 개수 절반의 제곱근으로 나누어주면 된다.
Xavier 초기화 방법은 표준 편차가 1 / \sqrt{n}이라고 한다. ReLU는 음의 영역에 대한 함숫값이 0이라서 더 넓게 분포시키기 위해 \sqrt{2}배의 계수가 필요하다고 이해할 수 있다.
import numpy as np
from visual import *
np.random.seed(100)
def relu(x):
result = np.maximum(0,x)
return result
'''
1. 입력 데이터를 정의하세요.
2. 가중치 초깃값 설정 부분을 왼쪽 설명에 맞게 바꿔보세요.
Numpy의 연산 메서드를 사용할 수 있습니다.
3. relu를 통과할 값인 'a_relu'를 정의하세요.
'''
def main():
x_relu = np.random.randn(1000,100)
node_num = 100
hidden_layer_size = 5
activations_relu = {}
for i in range(hidden_layer_size):
if i != 0:
x_relu = activations_relu[i-1]
w_relu = np.random.randn(100,100) * np.sqrt(2/node_num)
a_relu = np.dot(x_relu, w_relu)
z_relu = relu(a_relu)
activations_relu[i] = z_relu
Visual(activations_relu)
return activations_relu
if __name__ == "__main__":
main()
출처: 앨리스 교육
반응형