Skip to content

서론

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

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

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

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

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

Bias

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

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

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

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

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

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

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

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

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

다음 시간?

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