본문 바로가기

Data Science/밑바닥부터시작하는딥러닝(3)

(10)
[밑시딥] 나만의 딥러닝 프레임워크 만들기, 더 큰 도전으로(2) 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 3권을 개인적으로 공부하면서 배운 내용을 기록하고 해당 책을 공부하시는 다른 분들에게 조금이나마 도움이 되고자 하는 목적 하에 작성된 포스팅입니다. 포스팅 내용의 모든 근거는 책의 내용에 기반하였음을 알립니다. 이번 포스팅에서는 그동안 만들어온 Dezero라는 딥러닝 프레임워크가 더 복잡한 모델인 CNN, RNN도 구현할 수 있도록 기능을 고도화해볼 것이다. 그리고 난 후 대표적인 CNN, RNN 계열 모델인 VGG16, LSTM 모델을 Dezero만을 활용해 빌딩해보도록 하자. 드디어 책의 마지막 챕터이다. 이제 그 끝을 향해 달려나가보도록 하자! 1. CNN 메커니즘 - 2차원일 경우 CNN을 코드로 구현하기 위해서는 CNN에 대한 개념 이해가 선행되어야 ..
[밑시딥] 나만의 딥러닝 프레임워크 만들기, 더 큰 도전으로(1) 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 3권을 개인적으로 공부하면서 배운 내용을 기록하고 해당 책을 공부하시는 다른 분들에게 조금이나마 도움이 되고자 하는 목적 하에 작성된 포스팅입니다. 포스팅 내용의 모든 근거는 책의 내용에 기반하였음을 알립니다. 어느덧 책의 마지막 챕터에 도달했다. 이번 포스팅에서는 그동안 만들어온 Dezero라는 나만의 딥러닝 프레임워크를 더 큰 도전을 향해 나아가도록 발전시켜본다. 학습시킨 모델의 파라미터를 저장하거나 로드하는 기능 뿐만 아니라 더 효율적인 학습을 위한 기법인 드롭아웃 같은 기능을 추가해본다. 다음 포스팅에서는 지금까지는 Fully Connected Layer 로만 구성된 DNN 딥러닝 모델을 구현했지만, 더 복잡한 모델인 CNN, RNN의 계층도 구현해볼 ..
[밑시딥] 나만의 딥러닝 프레임워크 만들기, 신경망 만들기(2) 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 3권을 개인적으로 공부하면서 배운 내용을 기록하고 해당 책을 공부하시는 다른 분들에게 조금이나마 도움이 되고자 하는 목적 하에 작성된 포스팅입니다. 포스팅 내용의 모든 근거는 책의 내용에 기반하였음을 알립니다. 이번 포스팅에서는 드디어 우리가 흔히 아는 오픈소스 딥러닝 프레임워크, 예를 들어 Tensorflow, Pytorch, Chainer를 사용하면서 접했던 API 형태로 Dezero를 추상화시켜볼 예정이다. 매개변수를 한데 모아주는 계층, Linear 계층같은 것들도 한데 모아주는 계층, 더 나아가 Optimizer, Dataset, DataLoader 까지 만들어볼 예정이다. 아마 딥러닝 프레임워크를 많이 사용해본 분들이라면 해당 이름의 API들이 어떤..
[밑시딥] 나만의 딥러닝 프레임워크 만들기, 신경망 만들기(1) 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 3권을 개인적으로 공부하면서 배운 내용을 기록하고 해당 책을 공부하시는 다른 분들에게 조금이나마 도움이 되고자 하는 목적 하에 작성된 포스팅입니다. 포스팅 내용의 모든 근거는 책의 내용에 기반하였음을 알립니다. 이번 포스팅에서는 드디어 Dezero 프레임워크를 활용해서 신경망을 만들 수 있도록 기능을 추가할 예정이다. 신경망을 만들기 위해서는 추가적으로 다양한 함수의 기능들이 추가되어야 하는데 이번에는 이러한 함수들을 추가하는 포스팅이 주요 내용이 될 예정이다. 또한 이전까지는 우리가 만들어온 Dezero는 주로 입력이 스칼라인 형태를 다루어왔지만, 현실에서 가장 빈번하게 다루어지는 텐서의 입력 형태도 처리될 수 있도록 확장할 예정이다. 1. 우리가 만들어온 ..
[밑시딥] 나만의 딥러닝 프레임워크 만들기, 고차 미분 계산(2) 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 3권을 개인적으로 공부하면서 배운 내용을 기록하고 해당 책을 공부하시는 다른 분들에게 조금이나마 도움이 되고자 하는 목적 하에 작성된 포스팅입니다. 포스팅 내용의 모든 근거는 책의 내용에 기반하였음을 알립니다. 저번 포스팅에서는 고차 미분 계산을 수학적으로 어떻게 구현해낼 수 있는지, 또 미분을 사용하는 이유는 목적함수를 최적화하는 것인데, 최적화 하는 방법론으로서 경사 하강법(Gradient Descent)과 뉴턴 방법(Newton's Method)의 개념이 무엇이고 차이점이 무엇인지도 알아보았다. 이번 포스팅에서는 뉴턴 방법 최적화 기법의 근간이 되는 고차 미분을 우리의 Dezero 프레임워크에 어떻게 녹여낼지에 대해서 배워보도록 하자. 그리고 고차미분이 ..
[밑시딥] 나만의 딥러닝 프레임워크 만들기, 고차 미분 계산(1) 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 3권을 개인적으로 공부하면서 배운 내용을 기록하고 해당 책을 공부하시는 다른 분들에게 조금이나마 도움이 되고자 하는 목적 하에 작성된 포스팅입니다. 포스팅 내용의 모든 근거는 책의 내용에 기반하였음을 알립니다. 저번 포스팅까지 우리가 만들어온 Dezero라는 프레임워크가 미분 계산을 자동화할 수 있어 역전파 시 미분 계산을 자연스레 할 수 있도록 만들었다. 하지만 더 어려운 작업을 자동화시켜야 해야 하는데, 그 작업이 바로 고차 미분 계산이다. 고차 미분이란, 1차 미분에서 미분을 $N$번 더 수행하는 2차 미분, 3차 미분, ... 을 의미한다. 이렇게 고차 미분을 수행해야 하는 이유는 함수를 최적화하는 것과 관련이 있다. 함수 최적화가 필요한 이유는 뭘까?..
[밑시딥] 나만의 딥러닝 프레임워크 만들기, 더 복잡한 미분 자동 계산(2) 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 3권을 개인적으로 공부하면서 배운 내용을 기록하고 해당 책을 공부하시는 다른 분들에게 조금이나마 도움이 되고자 하는 목적 하에 작성된 포스팅입니다. 포스팅 내용의 모든 근거는 책의 내용에 기반하였음을 알립니다. 저번 포스팅까지 해서 일직선의 계산 그래프 형태만이 아닌 더 복잡한 계산 그래프 형태도 자동미분할 수 있도록 여러가지 클래스들을 개선했었다. 하지만 직전까지 만든 코드들에 대해서도 개선사항들이 존재한다. 먼저 메모리를 절약할 수 있다는 점과 변수 사용성 개선, 연산자 오버로드 등이 있다. 그러면 이제 하나씩 개선시켜보도록 하자. 그 첫번째 내용으로는 메모리를 관리하는 것이다. 1. Python은 메모리를 어떻게 관리하고 있을까? 먼저 해당 목차에서 소개..
[밑시딥] 나만의 딥러닝 프레임워크 만들기, 더 복잡한 미분 자동 계산(1) 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 3권을 개인적으로 공부하면서 배운 내용을 기록하고 해당 책을 공부하시는 다른 분들에게 조금이나마 도움이 되고자 하는 목적 하에 작성된 포스팅입니다. 포스팅 내용의 모든 근거는 책의 내용에 기반하였음을 알립니다. 저번 포스팅까지 걸쳐서 순수하게 Python, Numpy 만을 활용해서 미분을 자동으로 계산하는 방법에 대해 알아보고 코드로 구현까지 했다. 하지만 지금까지 배운 방법은 약간의 제약성이 존재한다. 바로 입력 또는 출력 변수가 여러개가 되는 경우에는 대응하지를 못한다. 이번 포스팅에서는 가변적인 길이의 입력, 출력 변수에도 대응이 가능하고 더 나아가 일직선 계산 그래프 형태가 아닌 분기, 결합이 추가된 복잡한 계산 그래프 형태에 대해서도 미분을 자동적으로..
[밑시딥] 나만의 딥러닝 프레임워크 만들기, 미분 자동 계산(2) 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 3권을 개인적으로 공부하면서 배운 내용을 기록하고 해당 책을 공부하시는 다른 분들에게 조금이나마 도움이 되고자 하는 목적 하에 작성된 포스팅입니다. 포스팅 내용의 모든 근거는 책의 내용에 기반하였음을 알립니다. 저번 포스팅에서는 나만의 딥러닝 프레임워크를 만드는 첫 단계로서 수치 미분을 통해 미분을 자동으로 계산하는 방법에 대해 알아보았다. 하지만 앞서 배운 수치 미분이라는 방법은 계산 비용과 정확도 측면에서 단점이 존재한다. 그래서 이에 대한 대안책으로 오차역전파라는 방법이 등장한다. 오차역전파를 이용하면 미분 계산도 효율적으로 빠르게 할 수 있으며 결과값의 오차도 작아진다. 책에서는 역전파 이론에 대해서도 어느 정도 분량을 담아 기술하고 역전파 구현하는 단..
[밑시딥] 나만의 딥러닝 프레임워크 만들기, 미분 자동 계산(1) 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 3권을 개인적으로 공부하면서 배운 내용을 기록하고 해당 책을 공부하시는 다른 분들에게 조금이나마 도움이 되고자 하는 목적 하에 작성된 포스팅입니다. 포스팅 내용의 모든 근거는 책의 내용에 기반하였음을 알립니다. 최근에 밑바닥부터 시작하는 딥러닝 1,2권을 깊숙하게 공부해보면서 부끄럽지만 나의 부족한 실력을 많이 채워나갈 수 있었다. 그리고 이번에는 실력을 좀 더 발전시키기 위해 해당 책 시리즈 3권을 천천히, 최대한 깊숙하게 공부해 보기로 결심했다. 참고로 3권도 마찬가지로 시중에 공개된 딥러닝 프레임워크인 Tensorflow, Pytorch 등과 같은 라이브러리를 사용해서 공부하는 내용은 아니다. 1,2권처럼 순수하게 파이썬과 넘파이만을 활용하게 되는데, 이..