밑시딥2의 1장은 밑시집1의 복습차원의 챕터이다.
신경망을 행렬로 표현하면?
신경망은 행렬의 곱으로 묶어서 계산할 수 있고, 이런 특징은 컴퓨터가 신경망을 계산하는데 매우 효율적으로 작동한다.
위와 사진과 같이 입력데이터가 몇차원이든 은닉층이 몇층이든, 노드가 몇개든 한개의 행렬로 계산할 수 있다.
신경망 layers의 기본요소 | Affine layer
그 다음은 신경망을 모듈형태로 구현해보는 내용이다.
Affine, Sigmoid 등을 클래스로 구현한다.
Affine은 fc layer를 말한다. 기하학에서 fc layer은 Affine변환이라서 이렇게 이름지었다고 한다.
Affine 계층의 기본 구조다.
class Affine:
def __init__(self, W, b):
self.params = [W, b]
self.grads = [np.zeros_like(W), np.zeros_like(b)]
self.x = None
def forward(self, x):
W, b = self.params
out = np.matmul(x, W) + b
self.x = x
return out
def backward(self, dout):
#구현
매개변수는 params 리스트에 보관한다. 나중에 backward() 메서드도 구현해 줘야한다.
신경망계층의 기본요소는 params, grads, forward(), backward()이다. 이것은 꼭 구현해주어야 한다.
앞으로 RNN 구현에도 비슷할 것이므로 잘 알아가자.