이는 행렬식 y=Xβ로 표현할 수 있고, 실제로는 Xβ만으로 완벽하게 y를 구할 수 없기 때문에, y에 가장 근접한 y^이 되도록 β를 찾는 것이 선형 회귀이다.
y^이 y에 근접한 지 알 수 있도록 L2 norm을 사용하면 ∥y^−Xβ∥2를 최소화하는 벡터 β를 찾아야 하고, 이를 경사하강법을 통해 풀게 되면 gradient vector ∇β∥y−Xβ∥2를 구해 β를 업데이트해나가는 방식으로 찾게 된다. y,X,β는 각각 y=⎣⎢⎢⎢⎢⎡y1y2⋮yn⎦⎥⎥⎥⎥⎤,X=⎣⎢⎢⎢⎢⎡x11x21⋮xn1x12⋱⋯x1d⎦⎥⎥⎥⎥⎤,β=⎣⎢⎢⎢⎢⎡β1β2⋮βd⎦⎥⎥⎥⎥⎤형태일 때, gradient vector를 차근차근히 계산해나가면 된다.
∥x∥2의 정의는 i=1∑n(xi)2이므로, 정의에 의해 ∥y−Xβ∥2=(n1i=1∑n(yi−Xiβ)2)1/2 (1/n은 n개의 vector에 대해 norm을 구하므로 n으로 나눠줌) =⎩⎪⎨⎪⎧n1i=1∑n(yi−j=1∑dxijβj)2⎭⎪⎬⎪⎫1/2가 되고, 이를 미분해나가면 다음과 같다. βk에 대해 미분할 때, n1i=1∑n(yi−j=1∑dxijβj)2=f(βk)라고 한다면
매 time step별 입력 xi에 사용되는 가중치 Wx와, 이전 잠재 변수 Hi에 사용되는 가중치 Wrec는 time step마다 모두 동일하게 적용된다.
RNN의 최종 출력은 time step별 입력과 이전 잠재 변수의 합이 계속 전달되어 출력되므로, 각 time step별 입력이 모두 더해져서 나오게 된다. 따라서, 가중치에 gradient descent를 적용할 때도, backpropagation을 통해 매 time step의 가중치의 gradient를 모두 구해서 더해야 한다. 이는 RNN의 출력을 수식으로 나타낸 뒤, 미분을 통해 다시 확인할 수 있다.
loss function이 MSE일 때, ∂wn(y−sn)2=n2(y−sn)∂wsn이므로, 가중치 wx,wrec에 대하여 각각 미분하게 되면 ∂wxsn=∂wx(xnwx+sn−1wvec)=xn+wvec∂wx(sn−1)=xn+wvec∂wx(xn−1wx+sn−2wvec)=xn+wvecxn−1+wvec2∂wxsn−2=i=0∑n−1xn−iwveci ∂wrecsn=∂wrec(xnwx+sn−1wvec)=∂wrec(sn−1wrec)=wrec∂wrec(sn−1)+sn−1=sn−1+wrec∂wrec(xn−1wx+sn−2wrec)=sn−1+wrecsn−2+(wrec)2∂wrecsn−2
형태가 나오는 것을 알 수 있게 된다.
회고
1주차 학습
첫 부스트캠프 수업인 Python & AI Math 수업을 들었다. 첫 시작인 만큼 많은 긴장과 걱정이 되었지만, 수업 대부분의 내용은 부스트캠프 참여 이전 pre-course에서 대부분 들었던 내용이고, Python이나 일부 수학 내용은 이미 알고 있던 내용이어서 그나마 할만했던 것 같다.
하지만, 확률론 및 통계학 강의는 생소한 내용이 많이 나오기도 했고, 분명 학부 과정에서 배웠지만 다 까먹은 바람에... 내용을 따라가기가 좀 힘들었다. 결국 뜬구름 잡듯이 이해하고 그냥 넘어간 것 같은데 남는 시간이나 주말 등을 이용해 강의를 다시 복습하고, 학교에서 배운 내용을 다시 찾아 공부해야 할 필요가 있을 것 같다.
기본과제는 기본적인 python 이용 및 numpy, pandas를 활용하는 문제로, 대부분은 쉽게 해결했지만 pandas는 아직 사용이 익숙치 않아 많이 해멘 기억이 난다.
심화과제는 대부분 수학적인 내용을 코드로 구현하는 문제였는데, 난이도가 높아 꽤 고생했다. OT때 심화과제는 풀지 못해도 괜찮다고 했지만, 풀고 나니 심화과제도 반드시 해야겠다는 생각이 들었다.
특히, RNN backpropagation이나 최대가능도 추정과 같은 내용은 강의를 들으면서 그냥 그렇구나 하고 지나가버려 완전히 머릿속에 이해되지 않았지만, 심화과제를 풀면서 좀 더 깊이 있는 이해를 가지게 되었다.
피어 세션
랜덤으로 정해진 팀원끼리 매주 약 1시간동안 학습에 도움이 되는 활동을 한다. 처음 만나는 사람들과 활동을 한다는 게 아직도 많이 부담스러웠지만, 5일간 매일 진행하다보니 점점 익숙해지는 느낌이 든다. 다행히 팀원들이 모두 좋은 분들이고, 서로 말을 놓기로 정하면서 부담을 덜 가지게 되었다.
1주차 피어세션은 대부분 자기소개, ice breaking 등의 시간을 가지고 발표 자료 등을 함께 만드는 식으로 진행했고, 화요일부터는 알고리즘 문제를 하나 정해 약 20분간 다같이 풀었다.
멘토링
이주용 멘토님께서 멘토링을 진행해주셨다. AI의 간략한 역사와 현황 등을 설명해주셨고, 현재 연구중이신 분야에 대해 설명해주셨는데, AI가 스스로 문제를 만들고 해결한다는 것과 self awareness에 대해 설명해주셨다. AI공부를 하면서 전혀 생각해보지 못한 분야라 좀 더 고민해봐야 할 내용이라고 생각한다.
또한, 각 팀원의 목표를 듣고, 그 목표를 향해서 무엇을 해야할 지 조언해주셨다. 나는 아직 공부하려는 세부적인 분야를 정해지 못해 그 부분부터 먼저 찾는 것을 추천해주셨고, 3월동안 공부하면서 내가 공부하고자 하는 분야를 찾는 것이 목표이다.
마스터클래스
임성빈 마스터님께서 진행해주셨다. 대학원 및 취업 관련 여러 조언들과 함께, AI분야에 있어서 수학의 중요성, 공부방법 등을 공유해주셨다. 대학원 관련 고민은 나도 많이 했었고, 이 시간을 통해 많은 궁금증을 해결했다.
또한, 나 스스로 수학이 약하다고 생각했는데, 이론만을 계속 공부하면서 대략적인 내용만 머리에 남아있었기 때문인 것 같다. 특히, AI engineer가 되고자 한다면, 강의만 들으며 이론적인 내용만 머릿속에 넣는 것 보다 대략적으로 이해했으면 이론 내용을 실제로 어떻게 쓰는지 찾아보거나, 직접 사용해 보는 것이 더 중요하다고 하셨다. 이는 이번에 심화과제를 직접 풀어보면서, 자세하게 몰랐던 BPTT 과정이나 최대가능도 추정 등을 더 명확하게 알 수 있었기 때문에 더 와닿는 조언이었다.