서론

이전엔 ReLU를 구현하려다가 갑자기 모든게 NaN이 되는 것을 보며 마무리했다.

글을 쓰기 전에, 어떤 문제가 생기는지 알아왔다.

말도 안되게 값이 커지면 inf가 나온다.

말도 안되게 값이 작아지면 -inf가 나온다.

이 둘이 더해지면 nan이 나온다. 마지막 레이어 계산 중에 inf와 -inf가 합쳐지며 nan이 나오는게 문제였다.

Bias

진짜 몇 시간정도 그래프 그리고 결과 덤프하고 덤프된거 보고 하면서 보냈는지 모르겠다.

그래도 결국엔 문제를 알아낸 것 같다.

지금 내가 만드는 것의 목표는 ‘결과가 PyTorch와 똑같게 만드는 것’이라고 볼 수 있다.

그래서 무언가가 PyTorch에서 돌린 것과 결과가 다르다면 잘못 만든 것이라고 생각할 수 있다.

지금까지는 내 코드에서 무언가 잘못된 것이 있을까 생각해봤다. 어딘가 잘못 구현한건 아닐까 하고.

결론적으로 말하면, 잘못 구현한 것은 없었다. 덜 구현한 것이 있었을 뿐이다.

챕터 부제목에 스포일러를 써놨다.

PyTorch 코드에서 Bias를 끄니까, 내 코드와 같은 결과가 나왔다. Bias가 없던 것이 문제였던 것이다.

대충 Bias 넣고 돌리니까 되는 모양이다.

다음 시간?

다른 Optimizer들을 구현해보자. 지금까진 SGD였다.