오늘 할 일
강의 수강 - 기학(이론), 컴그(이론), 컴개(이론)
내일 할 일
강의 수강 - 컴네(이론), 기학(실습), 컴프2(이론)
과제 - 기학
RNN을 사용하기 좋을 때? spatial한 data를 사용할 때. 시간 순서가 중요할 때. data에 자기상관성이 있을 때.
RNN은 parameter sharing을 하는데, hidden node를 거칠 때마다 w를 곱해간다. 즉, 같은 network 내에서 parameter sharing을 한다. (chain of events, repetitive structure, state transition system)
현재 hidden node인 h(t)은 lossy summary(weighted summary)라고 할 수 있다. 즉, 여태까지의 weight를 축약해 넣어놓은 정보들이 들어있다.
RNN에 대한 중요한 디자인 패턴
1. 한 번에 하나의 output을 만들고, hidden unit끼리 연결.
2. 한 번에 하나의 output을 만들고, output과 hidden unit끼리 연결.
3. 전체 sequence를 보고 하나의 output을 만듦. hidden unit들 간은 연쇄 연결 (긍정/부정 분석기 등에 주로 사용)
U : input-to-hidden
W : hidden-to-hidden
V : hidden-to-output
RNN은 backpropagation을 통해 오류가 모든 시점에 전달 되어야 하는데, 계산적으로 매우 복잡하다.
update할 게 많아져서 시간이 오래걸리지만, 특별할 건 없음.
encoder-decoder : 번역기 등에 주로 사용. 하나의 context vector를 만들어, 넣는다. context vector는 글자가 될 수도, 단어가, 등등 될 수도 있음. encoder의 마지막 hidden unit을 context로 생각해, decoder의 hidden unit 각각에 넣어준다.
skip connections : 너무 많은 depth는 까먹을 수도 있으니 직접 집어넣자.
many-2-one : 문서 분류/감정 분석 등에 이용
many-2-many(seq2seq)
1-2-many : img captioning
LSTM : RNN 구조에서 long-term dependencies를 극복하기 위해 고안. 기본적은 틀을 같으나, long-term memory가 지나가는 cell state를 가진다는 점에서 다름. cell state는 self-connection.
forget gate : old memory를 다음 state로 얼만큼 넘겨줄 것인가?(잊어버릴 것인가?) 1에 가까울 수록 기억한다는 뜻. ft
input & input gate : 현재 정보를 그대로와, sigmoid 형태로 넘겨줌. it : input gate. Ct : input
Ct = ft * Ct-1 + it * Ct~
output gate : context 값을 얼마나 hidden으로 보낼지.
LSTM은 unit들이 2set에서 8set가 되니 연산량이 엄청 커짐. 복잡.
encoder-decoder도 입출력 사이 거리가 멀어졌을 때, 앞의 정보가 손실될 가능성 때문에 고안. encoder의 hidden vector 중, decoder의 hidden vector와 유사한 게 있으면 해당 encoder의 hidden vector는 예측에 중요한 key가 될 수 있다고 판단. 필요한 부분에 넣어준다. 이를 attention이라고 함.
attention mechanism은 input에 대해 가장 중요했던 input이 뭔질 알 수 있으니, (확률값이 가장 높은 값) 설명력이 좋다.
img classification 할 땐 분류하고 싶은 class를 미리 정의해놓고 진행함
=> 객체 중심적임.
과제
1. 밝기에 따라 객체가 달라질 수도
2. 모양이 달라질 수도
3. 가려질 수도 (치명적)
4. 배경과 비슷해서 맞히기 어려울 수도.
5. 비슷하게 생겼을 수도
cnn은 이미지를 뽑는 과정까지 반복한다.
filtering mask는 특징 기술하는 용으로도 쓰일 수 있다.
filtering mask를 설계 잘 하면 어떤 객체를 포함하는 지 등 효율을 올릴 수 있다.
GIST : filtering을 이용한 특징 추출이 주 목표. 이미지를 잘라서 특징 추출을 하는데, 다양한 종류의 filter를 못 쓰니 유연성이 떨어지는 게 한계이다.
img의 depth는 3인 경우가 많다. RGB를 주로 쓰기 때문. depth의 수는 filter의 수 D와 같다. filter가 많아지면서 deep한 구조. 이 filter는 user가 정한다. output에서 각 slice는 set of weights이다. output은 특징 map이라고 함. vector는 아니니까. input depth와 filter의 depth를 맞춰줘야 함.
image -> low-level features -> high-level features => linearly separable classifier ->
filtering을 하면서, filter-size나 stride가 커지면 output의 크기는 작아진다.
pooling을 진행하면 전역적 정보 추출에 좋다. 영상은 전역적인 정보를 들여다봐야 하기 때문에 효과적이다. 영상 크기를 줄인다는 것은 지역적 정보를 버린다는 것과 같다.
y = w2 * w1 * x 꼴인데, y = w * x꼴로 만들 수 있다. w2 : 2x4, w1 : 4 x 3이라 치면, w : 2 x 3꼴. 만약 바꾼 꼴로 만들면, 연산을 줄일 수 있지만 결과는 같게 할 수 있다. 근데 이러면 하나의 연산이 돼버려서, 몇번을 학습시켜도 linear 연산이 돼버린다. 따라서, non-linear하도록 activ func를 적용하는 것이 필수다.
최근 swish가 많이 쓰인다.
마지막에 softmax해서 확률화를 해야한다.
정답 - 예측값 = Loss. Loss를 최소화 하도록 back-propagation