20/05/07

종만북과 밑바닥2를 공부했다.

종만북 19장의 ITES문제는 long long 자료형 썼더니 예제대로 안나와서 당황했다.

unsigned int를 썼어야 했다니….

밑바닥2 8장의 attension 부분이 길어서 2일에 나눠 공부하려고 했는데 뭔가 인상적이라서 쭉 읽어 버렸다.

‘attension is all you need’ 논문과 NTM은 tensorflow kr에서 이름만 봤었는데 엄청 인상적이었다.

솔직히 책에서 다 다루지 않고 개념적인 설명만 해줘서 ‘아 이런 느낌이구나’하는 정도 뿐이다.

나중에 시간나면 두 논문도 읽어봐야 겠다.

이제 밑바닥2는 끝내고 핸즈온 머신러닝책이 도착해서 읽어 봐야 겠다.

오늘은 여인수를 정리 하려고 했는데 밑바닥2 이해하며 읽는데에 시간을 다 보내버렸다.

내일은 좀더 많은 시간 투자해서 공부해야겠다.

TID


  • 종만북 19장

  • 밑바닥 딥러닝2 - 8장

    • 얼라인먼트 (Alignment) ‘나=I’, ‘고양이=cat’ 과같이 단어나 문구의 대응 관계를 나타내는 정보. 원래는 수작업으로 만들었지만 어텐션에서는 기계에 의한 자동화라는 흐름이 되었다.

    • Attension 기법 원하는 정보에 주목하는 기법. 글로 쓰면 이해 될지 모르겠다. peeky에서 lstm과 affine 계층 사이에 attension 계층을 추가한다. lstm에는 input으로 encoder의 마지막 은닉층이 들어간다.

      attension에는 lstm의 output과 encoder의 모든 은닉층이 들어간다. attension은 또 2개로 다시 나뉜다. 1.Attension weight 층 lstm의 output과 encoder의 모든 은닉층을 하다마르곱으로 각 은닉층과 내적을 한다. 벡터의 유사도를 보는 것이다. 이러한 방식으로 인해 선택임에도 미분가능한 방식이 되는 것이다. 이후 값을 정규화 하기 위해 softmax를 사용한다.

      2.weight sum에서는 다시 attension weight 층의 output과 내적을 한다. 이 Attension 계층의 output과 lstm의 output이 Affine 계층으로 들어간다. 물론 위치가 항상 이런식은 아니다 본인이 정보를 주고 싶은 곳과 연결하면 된다. 결과는 해보지 않으면 모른다.

    • 양방향 LSTM 기존의 lstm 외에 역방향의 lstm계층을 추가한다. 솔직히 reverse랑 뭐가 다른지 모르겠다.

    • Skip connection, residual connection, shor-cut (스킵 연결, 잔차 연결, 숏컷) 다같은말 계층을 넘어 연결하는 방법 Unet의 skip connection과 똑같다. 덧셈은 역전파 시 기울기를 그대로 흘려보내므로 모델의 깊이가 깊어져도 기울기가 소실되지 않는다.

    • Transformer 모델 (Self-Attention) 기존의 이전의 시각에 계산한 결과를 순서대로 계산하는 RNN 기반의 방식들은 병렬로 계산하는게 불가능하다. 그래서 RNN을 없애는 연구의 일환으로 “Attention is all you need”라는 논문에서 제안한 모델이다. 논문 제목이 말해주듯 RNN이 아닌 Attensiondmf 이용하는데 ‘자신에 대한 주목’이 된다. 즉, 하나의 시계열 데이터를 대상으로 한 어텐션으로 하나의 시계열 데이터 내에서 각 원소가 다른 원소들과 어떻게 관련되는지를 살펴보자는 취지다. 추가로 이 논문에서는 Attension외에도 Skip connection, Layer Normalization, Positional Encoding과 같은 기법이 사용되었다. 구글의 GNMT보다 학습 시간을 큰 폭으로 줄였고 번역 품질도 상당히 끌어올렸다.

    • Neural Turing Machine(NTM) RNN이나 LSTM은 내부 상태를 활용해 시계열 데이터를 기억할 수 있다. 그러나 내부 상태는 길이가 고정이라서 채워 넣을 수 있는 정보량이 제한적이다. 그래서 RNN 외부에 기억 장치(메모리)를 두고 필요한 정보를 사용하는 방식이다. Attension을 이용하면 Encoder와 Decoder는 ‘메모리 조작’과 같은 작업을 수행한다. 즉, Encoder가 필요한 정보를 메모리에 쓰고, Decoder는 그 메모리로부터 필요한 정보를 읽어 들인다고 해석할 수 있다. RNN의 외부에 정보 저장용 메모리 기능을 배치하고, Attension을 이용해 그 메모리로부터 필요한 정보를 읽거나 쓰는 방법이다. 컨트롤러라는 기능이 나온다. 여기서 컨트롤러는 컴퓨터(혹은 튜링머신)와 같은 능력을 얻는데 이 능력은 다음 두가지 이다.

      • 필요한 정보를 쓰거나 불필요한 정보를 지우는 능력
      • 필요한 정보를 다시 읽어 들이는 능력

      이렇게 하면 각 노드가 필요한 위치의 데이터를 읽고 쓸 수 있게 된다. 즉 , 원하는 목적지로 이동할 수 있다. 이러한 메모리 조작을 ‘미분 가능’한 계산으로 구축했다. Write Head와 Read Head라는 구조가 나온다. 여기서 Attension을 사용한다. LSTM 계층이 ‘컨트롤러’가 되어 NTM의 주된 처리를 수행한다. 그리고 각 시각에서 LSTM 계층의 은닉 상태를 Write Head 계층이 받아서 필요한 정보를 메모리에 쓴다. 그런 다음 Read Head 계층이 메모리로부터 중요한 정보를 읽어 들여 다음 시각의 LSTM 계층으로 전달한다.

TODO list


  • 사진 latex 문법으로 교체
  • 종만북-Algospot 1문제 이상 풀기
  • 핸즈온 머신러닝
  • 여인수 정리

소행렬식, 여인수

소행렬식(Minor Determinant)

행렬 \(A\)가 정의 되어 있을 때 소행렬은 A에서 i행과 j열을 제외한 행렬이 된다. 이 소행렬의 행렬식을 \(M_{ij}\)로 표기하고 소행렬식이라고한다.

예를 들면 다음과 같다.

\(A=\begin{pmatrix}a_{11}&a_{12}&a_{13}\\a_{21}&a_{22}&a_{23}\\a_{31}&a_{32}&a_{33}\end{pmatrix}\) 일 때 \(M_{22}= \begin{vmatrix}a_{11}&a_{13}\\a_{31}&a_{33}\end{vmatrix}\)

여인수(Minor Determinant)

소행렬식에 -1의 \(i+j\)승을 곱한 결과 \(A_{ij}=(-1)^{i+j}M_{ij}\)

ex) \(A=\begin{pmatrix} 1&2&3\\ 4&5&6\\ 7&8&9 \end{pmatrix}\\ M_{21} = -1 \times \begin{vmatrix}2&3\\8&9\\\end{vmatrix}=6\) \(M_{ij}\)는 행렬식이기 때문에 스칼라이다.

여인수로 이루어진 행렬을 \(C\)로 표기하고 여인수 행렬이라 한다.

여인수 행렬을 전치한 행렬을 수반행렬(adjoint matrix)이라 하고 \(adj A\)로 표기한다.

수반행렬을 이용하면 역행렬을 증명할 수 있다.

\(A\)와 \(adj A\)를 곱할 때 \(i=j\)일 때는 \(detA\)가 되고 \(i \ne j\)일 때 동일한 행에 대해 여인수를 구하는 것과 같기 때문에 0이 된다.

그렇다면 \(A(adj A)=(det A)I\)가 되기 때문에 \(A^{-1}=\frac{adj A}{det A}\)가 된다.

ex)

\(A=\begin{pmatrix} 2&3&-1\\ 5&2&7\\ 4&2&1 \end{pmatrix}\).

\(C=\begin{pmatrix} \begin{vmatrix} 2 & 7 \\ 2 & 1 \end{vmatrix} & -1 \times \begin{vmatrix} 5 & 7 \\ 4 & 1 \end{vmatrix} & \begin{vmatrix} 5 & 2 \\ 4 & 2 \end{vmatrix}\\ -1 \times \begin{vmatrix} 3 & -1 \\ 2 & 1 \end{vmatrix} & \begin{vmatrix} 2 & -1 \\ 4 & 1 \end{vmatrix} & -1 \times \begin{vmatrix} 2 & 3 \\ 4 & 2 \end{vmatrix}\\ \begin{vmatrix} 3 & -1 \\ 2 & 7 \end{vmatrix} & -1 \times \begin{vmatrix} 2 & -1 \\ 5 & 7 \end{vmatrix} & \begin{vmatrix} 2 & 3 \\ 5 & 2 \end{vmatrix} \end{pmatrix}\).

\(adj A = c^{T} = \begin{pmatrix} -12 & -5 & 23\\ 23 & 6 & -19\\ 2 & 8 & -11 \end{pmatrix}\).

\(A(adj A)=\begin{pmatrix} 23 & 0 & 0 \\ 0 & 23 & 0 \\ 0 & 0 & 23 \end{pmatrix} = (det A)I\).

\(A^{-1} = \begin{pmatrix} \frac{-12}{23} & \frac{-5}{23} & 1\\ 1 & \frac{6}{23} & \frac{-19}{23}\\ \frac{2}{23} & \frac{8}{23} & \frac{-11}{23} \end{pmatrix}\).

20/05/06

밑바닥과 선형대수는 계획한 만큼 했다.

종만북을 못풀어본게 계획 에러이다.

밑바닥 attension 부분이 길어서 2일에 나눠서 공부해야할 것같다.

선형대수 책은 그날그날 이해도에 따라 진도가 너무 달라져서 계획을 하기가 애매한 것 같다.

내일은 종만북 1장을 이해하는 거부터 공부 시작해야 겠다.

TID


  • 밑바닥2 - 7장

    • seq2seq sequence to sequence의 약자이며 한 시계열 데이터를 다른 시계열 데이터로 변환하는 것을 뜻한다. 기계 번역, 챗봇, 메일의 자동 답신 등 다양하게 응용된다.

      일반적으로 encoder와 decoder가 나누어져 있고 둘다 LSTM을 사용, encoder의 마지막 부분을 decoder의 인풋으로 사용한다.

      이미지 캡셔닝같은 경우 CNN을 encoder로 쓰고 LSTM을 decoder로 사용한다.

      학습효율개선 방법에는 입력 반전(reverse)과 엿보기(peeky)가 있다.

      하이퍼파라미터에 영향을 크게 받는다고 한다.

    • 입력 반전(reverse) 입력의 index를 반전시킨다. encoder의 처음 단어와 decoder 처음이 가까워 지므로 기울기가 더 빨리 전달되는 효과가 있다고 한다. 다만 입력 데이터를 반전해도 단어 사이의 평균적인 거리는 그대로 이다. 데이터에 따라 달라지므로 무조건 학습이 좋아진다는 결코 아니다.

    • 엿보기(Peeky) 원래 일반적인 seq2seq의 경우 encoder의 마지막 은닉층 h만 decoder의 lstm 첫 계층에 input으로 들어간다. peeky 방식은 유일한 정보인 h를 모든 계층에 입력으로 넣는 방법이다.(lstm 계층 뿐 아니라 Affine 계층, 그리고 모든 t에 입력으로 넣는다.) 모든계층에 전달해야 하기 때문에 가중치 매개변수가 커져서 계산량도 늘어난다. 즉, 모든 상황에서 좋은 것은 결코 아니다.

  • 프로그래머를 위한 선형대수 2.3장

    • null space, image, rank, linear dependent

TODO list


  • 사진 latex 문법으로 교체
  • 종만북-Algospot 1문제 이상 풀기
  • 밑바닥2 8장
  • 여인수 정리
  • 프로그래머를 위한 선형대수

사상의 핵(영공간)과 상,랭크

사상의 상(image)

\(n \times m\)사상 \(A\)에 의해 \(m\)차원의 벡터 \(x\)는 \(n\)차원의 벡터 \(y\)로 이동한다. \(Ax=y\) 이때, 주어진 \(A\)와 \(m\)차원의 벡터 \(x\)에 대해 만들어지는 공간들의 집합을 A의 상(image)라고 한다.

표기는 다음과 같다. \(ImA\) \(A\)의 열벡터를 이용해 다음과 같이 나타내기도 한다. \(Im A = span \{ a_{1}, ..., a_{m} \}\) \(n>m\)인 경우 \(m\)차원의 벡터 \(x\)에 의해 \(n\)차원의 상을 만들게 된다. 즉, 사상 \(A\)에 의해 차원의 증가가 일어난다.

이때, \(ImA\)내의 점 \(y\)에 대해 대응하는 \(x\)가 존재하지 않을 수 있다는 역설적인 관계가 된다.

이러한 경우를 현실에서는 노이즈, 섞이면 있어서는 안되는 결과 값이라고 본다. 이 부분은 수학적 논의와는 맞지 않다고 한다.

좀더 맞게 설명하자면 \(ImA\)가 \(n\)차원 공간 모두를 나타낼 수 있는가를 판단하면 된다.

‘어떤 결과 \(y\)에도 그것이 나오는 원인 \(x\)가 존재하는가’를 만족 했을 때 ‘사상 \(y=Ax\)는 전사 혹은 위로의 사상이다’라고 한다.

반대로 만족하지 않을 때는 ‘안으로의 사상’이라고 한다. (\(n>m\) 일때)

사상의 핵(Kernel),영공간(null space)

\[Ax=0\]

위의 식을 만족하는 벡터 \(x\)의 집합을 핵 또는 영공간이라고 한다.

즉, 벡터\(y\)를 영벡터로 만드는 \(n\)차원의 벡터 \(x\)가 이루는 공간을 사상 A의 핵 또는 영공간이라고 한다. \(Ax=0\) 그리고 이 공간을 다음과 같이 표기한다. \(Ker A\) 같은 결과 \(y\)가 나오는 원인 \(x\)가 유일할 때 역행렬을 구할 수 있다. (즉, \(KerA\)의 차원은 0)

위의 문장이 성립할때 ‘사상 \(y=Ax\)는 단사 혹은 일대일 사상’이라고 한다.

만약 단사와 전사 모두 성립할때 ‘사상 \(y=Ax\)는 전단사이다’라고 한다.

차원 정리

차원 정리는 다음과 같이 짧게 정리할 수 있다.

\(n \times m\) 행렬 \(A\)에 대해

\(dim \ KerA + dim \ ImA=n\)이다. 여기서 \(dim\)은 차원을 나타낸다.

이를 이용하면 \(dim \ KerA\)혹은 \(imd \ ImA\)를 알고 있을 때 나머지 한쪽을 알 수 있다.

랭크(Rank)

사실 \(Im A\)의 차원 \(dim Im A\)에는 ‘행렬 \(A\)의 랭크(rank)’라는 이름이 있다. 기호로는 \(rank A\)로 나타낸다.

이를 차원정리로 다시 나타내면 다음과 같이 쓸 수 있다. \(dim \ Ker A + rank A = m\) 이를 다시 정리하면 다음과 같이 쓸 수 있다.

  • \(rank A = n \Leftrightarrow\) A는 단사
  • \(rank A = m \Leftrightarrow\) A는 전사

  • \(rank A\)는 \(n\) 이하이며 \(m\)이하이다.

20/05/05

  • 오늘은 약속이 있어서 계획한 것 보다 양이 훨씬 적다. 해야 할 공부는 점점 늘어나고…..

  • 프로그래머를 위한 선형 대수 2.1~2.2는 가우스 요르단 소거법을 이용해 연립방정식을 풀거나 역행렬을 구하는 방식에 대해 설명한다. 가우스 요르단 소거법을 포스팅하는 과정에서 시간이 많이 소요되었지만 잘못 이해했던 부분을 바로 잡을 수 있었다.
  • 밑바닥 2는 NLP 위주의 구성인데 너무 처음부터 코드에 집착하는 것 같다. 일단 한번 책을 읽고 코드를 빠르게 훑고 어느 부분이 어느 부분이다 알아볼 정도만 하면 될 것 같다. numpy로 만들 일이 없을 텐데 너무 ‘이걸 내가 만든다면…..’ 식으로 해서 너무 오래 걸렸던 것 같다.

TID


  • 종만북 18장
  • 프로그래머를 위한 선형 대수
    • 역행렬이 존재하는 행렬의 곱은 역행렬이 존재한다.
    • 역행렬이 존재하는 정방행렬을 정칙행렬이라고 한다.
    • 가우스 요르단 소거법
  • 밑바닥 2 - 6장 코드 이해하기

TODO list


  • 사진 latex 문법으로 교체

  • 종만북-Algospot 1문제 이상 풀기

  • 밑바닥2 7장

  • 여인수 정리