딥러닝AI

리뷰 - 밑바닥부터 시작하는 딥러닝

June 20, 2025

thumbnail

이 책을 무려 9년 전에 샀다는 것이 놀랍다. 아마 그 때부터 이 책을 제대로 읽기 시작해 공부를 해왔다면, 나는 엄청난 수혜를 받았을지도 모르겠다.

'밑바닥부터 시작하는 딥러닝', 이 책을 다시 손에 들게 된 것은 AI를 제대로 공부하기 시작하면서 부터다. 요즘 LLM으로 시작해서 에이전트까지 AI에 대한 관심이 아주 뜨겁다. 필자도 개발자로서 LLM의 빠른 성장을 목격하고 난 이후에는 눈여겨보게 되었다. 그리고 LLM의 작동원리를 알기 위해 리서치를 진행했는데, 현재의 기술을 이해하기에는 기반이 되는 지식이 부족하다 느꼈다. 다행히도 개괄적으로 정리한 글링크을 발견하면서 필자가 어디서부터 모르는 지를 확인할 수 있었다.

뭔가를 배울 때는 역시 모르는 것이 무엇인지부터 아는 게 좋은 것 같다. 필자가 모르는 것은 딥러닝의 작동 원리였다.

딥러닝

이 책은 딥러닝을 Numpy라는 Python 라이브러리로 밑바닥부터 구현해가는 것을 목표료 한다. 그래서 딥러닝의 전체적인 흐름을 알 수 있었다. 각 구성요소를 자세하게 설명하면서도, 이해하기 쉽게 쓰여졌다.

딥러닝을 하는 이유는 입력이 들어왔을 때, 올바른 답을 출력하는 모델을 만드는 것이다. 이 모델은 답을 출력하기 위한 수식으로 구성된다. 간단한 수식은 xx를 입력값이라고 했을 때, Ax+BAx+B 같은 구조를 가지기도 한다. xx를 제외한 AABB는 수정 가능한 가중치 매개변수다. 올바른 답을 출력하기 위해서는 가중치 매개변수를 조정해야 하는데, 적정 가중치 매개변수를 찾아가는 이 과정을 학습이라고 한다. 가중치 매개변수는 보통 행렬의 형태를 갖는다.

가중치 매개변수와 손실함수의 관계

그럼 이제 가중치 매개변수를 어떻게 조정해야하는 지에 대한 의문이 따른다. 조정 방식은 현 가중치를 갖고 예측한 모델의 값이 실제 정답과 수치적으로 얼마나 차이가 나는 지를 표현하는 손실함수와 관련되어 있다. 결국 예측한 값과 실제 정답이 같은 것을 목표로 만들어야하기 때문에 손실함수의 값은 0에 가까울 수록 좋다.

손실함수의 값을 최대한 작게 만들기 위해서 사용하는 방식은 미분을 이용하는 방식이다. 가중치 매개변수는 손실함수를 각 가중치 매개변수의 편미분값으로 가감하는 방식을 통해 조정이된다. 보통은 감소를 시키면서 '기울기 하강법'이라고 일컫는다.

필자는 기울기 하강법이 작용하는 메커니즘을 이렇게 이해했다. 어떤 가중치 매개변수가 손실함수의 결과값에 대해서 a 값만큼 증가시키는 영향(결국 편미분값의 의미)을 준다고 하자. 그럼 반대로 영향을 주는 정도를 감소시켜야 손실함수의 값이 0으로 가까워질 것이다. 결과적으로 이 조정은 가중치 매개변수가 손실함수의 결과에 미치는 영향을 적게 만든다.

가중치 초기값 설정

가중치의 초기값을 설정하는 것은 모델의 예측을 개선하는 데 중요하다. 보통 ReLU 는 He 라는 초기값 설정을, 그 외 시그모이드, tanh 는 Xavier 초기값 설정 방식을 사용한다.

가중치 최적화 방식

위에서는 가중치 매개변수를 조정하는 방식을 SGD(통계적 기울기 하강)를 통해 설명했다. 하지만 SGD는 변위가 큰 방식이어서 학습 속도가 느리다는 단점이 있다.

이를 개선하기 위해서 여러 방식이 소개된다.

  • Momentum은 가속도의 개념을 적용한 방식이다. 이전 값에 가속률을 곱하는 방식으로 드라마틱한 변화를 적게 만든다.
  • AdaGrad는 학습률을 각 매개변수 맞춤형으로 점차 적게 영향을 받게 적용하는 방식이다. 움직임이 큰 매개변수의 학습률이 반비례하게 작용하게 설계되어 있다.
  • Adam은 Momentum 과 AdaGrad의 장점을 섞은 방식이다. 현재 Adam 방식이 많이 채택되고 있다.

오버피팅 억제

오버피팅은 모델이 훈련 데이터에 과적합하여 학습된 것을 말한다. 모델은 다른 입력에도 올바른 정답을 낼 수 있게 범용적으로 학습이 되어야 한다.

  • 가중치 감소: 손실함수의 결과에 특정 값을 더하여 역전파 시 가중치를 더 감소시키게 만든다.
  • 드롭아웃: 신경망의 특정 매개변수를 무시하고 값만 흘러가게 하는 방식이다.

합성곱 신경망(CNN)

이미지 형태의 데이터를 다룰 때, 입력값에 내재된 관계를 포함하여 학습시키기 위한 방법으로 합성곱 신경망을 사용할 수 있다.

합성곱 신경망에서의 가중치 매개변수는 필터라는 개념으로 소개된다. 필터는 정해진 사이즈만큼(이미지라고 가정했을 때, 높이와 넓이)의 데이터를 필터의 원소와 입력의 원소를 곱한 값의 총합을 새로운 매트릭스의 형태로 출력한다. 이 과정에서 padding을 통해 입력데이터를 넓힐 수 있으며, stride를 통해 필터가 적용되는 각 구간의 간격을 정할 수 있다.

합성곱 신경망은 풀링이라는 층이 보통 따르게 된다. 풀링계층은 공간의 크기를 줄이는 역할을 한다. 보통은 정해진 풀링 사이즈 내의 최대값을 구하여 새로운 행렬을 출력하는 방식으로 작동한다.

마무리

LLM을 제대로 공부하기 전, 필요한 딥러닝 지식을 꽉 채워서 배울 수 있는 책이었다. 읽어나가면서 더 AI가 재밌어지는 기분이 들었다.

기존 pytorch를 이용하면 모델이 어떻게 값을 갱신해가는지 머릿속으로 그려내는 것이 힘들었다. 그래서 Numpy를 통해 순전파와 역전파 과정을 직접 구현한 것이 딥러닝을 이해하는 데 도움이 많이 될 것 같다.

추가적으로 MNIST 라는 숫자 손글씨 데이터를 학습하여 결과를 도출하는 모델을 직접 만들어 볼 수 있는 경험도 유익했다.

AI에 대한 공부를 시작할 때, 볼만한 책으로 꼭 추천할만 하다.

리뷰 - 밑바닥부터 시작하는 딥러닝 - ALROCK Blog