신경망의 핵심 가중치
신경망에서 가장 중요한 부분은 바로 연결 노드의 가중치 이다.
가중치는 전파 시 전달되는 신호와 역전파 시 오차를 계산하는 데 쓰이며, 이를 통해 신경망을 개선하는 역할을 수행한다.
가중치는 행렬로 간결하게 표현될 수 있다. 그러므로 다음과 같은 행렬을 만들 수 있다.
- (은닉 노드 X 입력 노드)의 크기를 가지는 입력 계층과 은닉 계층 사이의 가중치의 행렬 W 1
- (출력 노드 X 은닉 노드)의 크기를 가지는 은닉 계층과 출력 계층 사이의 가중치의 행렬 W 2
파이썬의 numpy 함수는 0과 1사이에서 임의로 선택한 값을 원소로 가지는 행렬을 생성한다 (행렬의 크기는 행 X 열)
numpy.random.rand(rows, columns)
numpy 를 사용하기 위해서는 numpy 모듈을 불러와야 한다.
행렬의 각각의 원소의 값은 0과 1 사이의 임의의 값이다. -> 가중치가 양수가 아니라 음수일 수도 있다는 사실을 무시한 것이라 개선할 필요가 있다.
예를들어서 범위는 -1.0 ~ 1.0이 되어야 한다. 작업을 간단히 하기 위해서 원소의 값에서 0.5를 빼줌으로써 실질적으로 -0.5 ~ 0.5 사이의 값을 가지도록 변경한다.
파이썬에서 가중치 행렬을 초기화할 준비가 되었으니, 가중치는 신경망에서 본질적인 부분이다.
함수가 호출되었을 때 사용되었다가 사라지는 것이 아니라 신경망의 처음부터 끝까지 함께하는 존재. 즉 가중치는 초기화의 한 부분일 뿐 아니라, 학습이나 질의 등 다른 함수들로부터 접근이 가능해야 한다.
아래 사진에서 보면 가중치 행렬 밑에 주석을 2줄을 달았는데, 저렇게 사용해도 된다.
필수는 아니지만, 가중치를 보다 정교하게 초기화할 수 있는 방법으로 numpy.random.normal() 함수를 사용하였다.
여기까지가 가중치의 행렬을 구현했다.
'기타 > 기타 잡다한 것들' 카테고리의 다른 글
[신경망] 파이썬으로 인공 신경망 만들기5 (0) | 2018.09.28 |
---|---|
[신경망] 파이썬으로 인공 신경망 만들기 4 (0) | 2018.09.28 |
[신경망] 파이썬으로 인공 신경망 만들기 2 (0) | 2018.09.27 |
[신경망] 파이썬으로 인공 신경망 만들기 1 (0) | 2018.09.27 |
[파이썬기초] 클래스와 객체 (0) | 2018.09.27 |