딥러닝으로 모델을 학습시키기 위해 미분 값을 구하는 과정이 필요하다. 만약 왜 미분이 필요한지 모른다면 '경사하강법과 학습률'을 참고하면 된다. 해당 내용을 몰라도 이번 글을 이해하는 데는 문제가 없다. 문제점 Chain-rule 연산자와 미분 결과 계산 과정 시각화 역방향으로 계산 문제점 일반적으로 미분값을 구할 때, 도함수를 구한 후 값을 대입해 계산한다. $f(x)=ax^3+bx^2+c \\ \cfrac{d}{dx}f(x)=3ax^2+2bx$ 하지만 문제는 모델의 연산 과정이 너무 복잡하다. $f(x)=Linear(Droupout( ... (maxpool(relu(conv(...))))))$ 위 예시는 아주 기본적인 CNN 모델의 구조이다. 그리고 가장 많이 사용되는 손실 함수인 Cross Entr..
1번에서 전체 개념을 가볍게 설명하고, 2번부터 자세하고 차근차근 설명해 두었습니다. 그러니 첫 부분이 이해되지 않아도 일단은 넘어가서 뒷부분을 읽고 돌아오시면 이해하기 더 편할 겁니다. 전체 개념 딥러닝에서 모델을 학습한다는 것은 실제 값과 예측 값의 오차를 최소화하는 가중치를 찾는 과정이다. 여기서 '오차'를 정의하는 함수를 비용 함수(Cost function)라고 한다. 즉, 비용 함수가 최솟값을 갖는 방향으로 가중치를 업데이트하는 작업이 필요하다. 경사 하강법이라고 불리는 Gradient Descent는 최솟값을 찾을 때 사용할 수 있는 최적화 알고리즘이다. 먼저, 최솟값을 찾을 함수를 설정한 후, 임의의 값으로 초기화하고 해당 값의 기울기를 빼면서 최솟값에 가까워질 때까지 반복하는 방법이다. $..
선형 구조 아래와 같이 은닉층이 있는 신경망은 어떻게 결과값을 계산하는지 확인해보자. $z_0=w_0x_0+w_1x_1$ $z_1=w_2x_0+w_3x_1$ $y=w_5z_0+w_6z_1$ 확인을 위해 식을 직접 대입해 보면, $y=w_5(w_0x_0+w_1x_1)+w_6(w_2x_0+w_3x_1) \\ =(w_5w_0+w_6w_2)x_0+(w_5w_1+w_6w_3)x_1 \\ =w_{t0}x_0+w_{t1}x_1$ 결과적으로 레이어를 추가했지만 또 다른 선형 함수가 만들어졌다. 그림으로 나타내면 아래와 같다. 즉, 은닉층을 선형적으로 쌓아도 결국 하나의 선형 함수로 정의된다는 것이다. 따라서 위와 같은 문제를 해결하기 위해 활성화 함수가 필요하다. 예: $y=w_5h_0(z_0)+w_6h_1(z_1)$..
기본적인 CNN 모델을 만들기 위해 필요한 개념들을 정리하였다. 2D Convolution Convolution은 합성곱 연산이다. CNN 모델에서 이미지 특징을 추출하는 과정이 바로 합성곱 연산이다. Input: 입력은 (h, w) 크기를 가지는 2차원 이미지. kernel: 이미지의 특징을 추출하기 위해 사용되는 필터. Feature map: Kernel을 거쳐 연산된 결과로, 추출된 이미지의 특징을 가짐. 2D Convolution 연산은 아래와 같이 수행된다. ("다음 단계" 클릭) HTML 삽입 미리보기할 수 없는 소스 Kernel은 계속 순회하며 이미지와 합성곱 연산을 수행한다. 그리고 그 결과로 추출된 값이 Feature map이다. 따라서, Feature map은 이미지로부터 추출된 특징이..
실행환경: Colab Pro (Python 3.7.15) 코랩은 90분 이상 동작이 없으면 런타임이 끊어질 수 있기 때문에 console을 열어 아래 스크립트를 실행한다. function connectRuntime(){ button = document.querySelector("body > div.notebook-vertical > colab-status-bar").shadowRoot.querySelector("button"); button.click(); console.log(" --Connected"); } setInterval(connectRuntime, 10 * 60 * 1000); 주기적으로 연결 버튼을 클릭해 코랩이 종료되지 않도록 한다. 준비 !pip install transformers !..