[U] Week 3 Day 14

나며기·2021년 2월 4일
0

부스트캠프 AI Tech

목록 보기
15/79
post-thumbnail

강의 복습 내용

[DAY 14] Recurrent Neural Networks

[AI Math 10강] RNN 첫걸음

  • 시퀀스 데이터 이해하기
    • 소리, 문자열, 주가 등의 데이터를 시퀀스(sequence) 데이터로 분류합니다.
    • 시퀀스 데이터는 독립동등분포(i.i.d.) 가정을 잘 위배하기 때문에 순서를 바꾸거나 과거 정보에 손실이 발생하면 데이터의 확률분포도 바뀌게 됩니다.
  • 시퀀스 데이터를 어떻게 다루나요?
    • 이전 시퀀스의 정보를 가지고 앞으로 발생할 데이터의 확률분포를 다루기 위해 조건부확률을 이용할 수 있습니다.
    • 시퀀스 데이터를 다루기 위해선 길이가 가변적인 데이터를 다룰 수 있는 모델이 필요합니다.
  • Recurrent Neural Network을 이해하기
    • 가장 기본적인 RNN 모형은 MLP와 유사한 모양입니다.
    • RNN은 이전 순서의 잠재변수와 현재의 입력을 활용하여 모델링합니다.
    • RNN의 역전파는 잠재변수의 연결그래프에 따라 순차적으로 계산합니다. (Backpropagation Through Time (BPTT))
  • 기울기 소실의 해결책?
    • 시퀀스 길이가 길어지는 경우 BPTT를 통한 역전파 알고리즘의 계산이 불안정해지므로 길이를 끊는 것이 필요합니다.
    • 이런 문제들 때문에 Vanilla RNN은 길이가 긴 시퀀스를 처리하는데 문제가 있습니다.
    • 이를 해결하기 위해 등장한 RNN 네트워크가 LSTM과 GRU 입니다.

[DLBasic] Sequential Models - RNN

  • Sequential Model

    • Naive sequence model
    • Autoregressive model
    • Markov model (first-order autoregressive model)
    • Latent autoregressive model
  • Recurrent Neural Network

    • Short-term dependencies
    • Long-term dependencies
  • Long Short Term Memory

  • Gated Recurrent Unit

    • Simpler architecture with two gates (reset gate and update gate).
    • No cell state, just hidden state.
    • GRU > LSTM

[DLBasic] Sequential Models - Transformer

The Illustrated Transformer

이 모델의 핵심을 정리해보자면, multi-head self-attention을 이용해 sequential computation을 줄여 더 많은 부분을 병렬처리가 가능하게 만들면서 동시에 더 많은 단어들 간 dependency를 모델링 한다는 것입니다.

Transformer 모델의 시각화 by Jay Alammar

Transformer는 Attention is All You Need이라는 논문을 통해 처음 발표되었습니다.

개괄적인 수준의 설명


기계 번역의 경우를 생각해본다면, 모델은 어떤 한 언어로 된 하나의 문장을 입력으로 받아 다른 언어로 된 번역을 출력으로 내놓을 것입니다.


그 black box를 열어 보게 되면 우리는 encoding 부분, decoding 부분, 그리고 그 사이를 이어주는 connection들을 보게 됩니다.


encoding 부분은 여러 개의 encoder를 쌓아 올려 만든 것입니다 (논문에서는 6개를 쌓았다고 합니다만 꼭 6개를 쌓아야 하는 것은 아니고 각자의 세팅에 맞게 얼마든지 변경하여 실험할 수 있습니다). decoding 부분은 encoding 부분과 동일한 개수만큼의 decoder를 쌓은 것을 말합니다. encoder들은 모두 정확히 똑같은 구조를 가지고 있습니다 (그러나 그들 간에 같은 weight을 공유하진 않습니다).


인코더에 들어온 입력은 일단 먼저 self-attention layer을 지나가게 됩니다. 이 layer 은 encoder가 하나의 특정한 단어를 encode 하기 위해서 입력 내의 모든 다른 단어들과의 관계를 살펴봅니다.
입력이 self-attention 층을 통과하여 나온 출력은 다시 feed-forward 신경망으로 들어가게 됩니다. 똑같은 feed-forward 신경망이 각 위치의 단어마다 독립적으로 적용돼 출력을 만듭니다.


decoder 또한 encoder에 있는 두 layer 모두를 가지고 있습니다. 그러나 그 두 층 사이에 seq2seq 모델의 attention과 비슷한 encoder-decoder attention이 포함되어 있습니다. 이는 decoder가 입력 문장 중에서 각 타임 스텝에서 가장 관련 있는 부분에 집중할 수 있도록 해줍니다.

벡터들을 기준으로 그림 그려보기


현대에 들어 대부분 NLP 관련 모델에서 그러듯, 먼저 입력 단어들을 embedding 알고리즘를 이용해 벡터로 바꾸는 것부터 해야 합니다.
각 단어들은 크기 512의 벡터 하나로 embed 됩니다. 우리는 이 변환된 벡터들을 위와 같은 간단한 박스로 나타내겠습니다.
이 embedding은 가장 밑단의 encoder 에서만 일어납니다. 이렇게 되면 이제 우리는 이렇게 뭉뚱그려 표현할 수 있게 됩니다. 모든 encoder 들은 크기 512의 벡터의 리스트를 입력으로 받습니다 – 이 벡터는 가장 밑단의 encoder의 경우에는 word embedding이 될 것이고, 다른 encoder들에서는 바로 전의 encoder의 출력일 것입니다. 이 벡터 리스트의 사이즈는 hyperparameter으로 우리가 마음대로 정할 수 있습니다.


입력 문장의 단어들을 embedding 한 후에, 각 단어에 해당하는 벡터들은 encoder 내의 두 개의 sub-layer으로 들어가게 됩니다.
여기서 우리는 각 위치에 있는 각 단어가 그만의 path를 통해 encoder에서 흘러간다는 Transformer 모델의 주요 성질을 볼 수 있습니다. Self-attention 층에서 이 위치에 따른 path들 사이에 다 dependency가 있습니다. 반면 feed-forward 층은 이런 dependency가 없기 때문에 feed-forward layer 내의 이 다양한 path 들은 병렬처리될 수 있습니다.

이제 Encoding을 해봅시다!


앞서 설명한 것과 같이, encoder는 입력으로 벡터들의 리스트를 받습니다. 이 리스트를 먼저 self-attention layer에, 그다음으로 feed-forward 신경망에 통과시키고 그 결과물을 그다음 encoder에게 전달합니다.
각 위치의 단어들은 각각 다른 self-encoding 과정을 거칩니다. 그다음으로는 모두에게 같은 과정인 feed-forward 신경망을 거칩니다.

크게 크게 살펴보는 Self-Attention


모델이 입력 문장 내의 각 단어를 처리해 나감에 따라, self-attention은 입력 문장 내의 다른 위치에 있는 단어들을 보고 거기서 힌트를 받아 현재 타겟 위치의 단어를 더 잘 encoding 할 수 있습니다.

Self-Attention 을 더 자세히 보겠습니다.

self-attention 계산의 가장 첫 단계는 encoder에 입력된 벡터들 (이 경우에서는 각 단어의 embedding 벡터입니다)에게서 부터 각 3개의 벡터를 만들어내는 일입니다. 우리는 각 단어에 대해서 Query 벡터, Key 벡터, 그리고 Value 벡터를 생성합니다. 이 벡터들은 입력 벡터에 대해서 세 개의 학습 가능한 행렬들을 각각 곱함으로써 만들어집니다.
여기서 한가지 짚고 넘어갈 것은 이 새로운 벡터들이 기존의 벡터들 보다 더 작은 사이즈를 가진다는 것입니다. 기존의 입력 벡터들은 크기가 512인 반면 이 새로운 벡터들은 크기가 64입니다. 그러나 그들이 꼭 이렇게 더 작아야만 하는 것은 아니며, 이것은 그저 multi-head attention의 계산 복잡도를 일정하게 만들고자 내린 구조적인 선택일 뿐입니다.


x1를 weight 행렬인 WQ로 곱하는 것은 현재 단어와 연관된 query 벡터인 q1를 생성합니다. 같은 방법으로 우리는 입력 문장에 있는 각 단어에 대한 query, key, value 벡터를 만들 수 있습니다.

self-attention 계산의 두 번째 스텝은 점수를 계산하는 것입니다. 아래 예시의 첫 번째 단어인 “Thinking”에 대해서 self-attention 을 계산한다고 하겠습니다. 우리는 이 단어와 입력 문장 속의 다른 모든 단어들에 대해서 각각 점수를 계산하여야 합니다. 이 점수는 현재 위치의 이 단어를 encode 할 때 다른 단어들에 대해서 얼마나 집중을 해야 할지를 결정합니다.


점수는 현재 단어의 query vector와 점수를 매기려 하는 다른 위치에 있는 단어의 key vector의 내적으로 계산됩니다. 다시 말해, 우리가 위치 #1에 있는 단어에 대해서 self-attention 을 계산한다 했을 때, 첫 번째 점수는 q1과 k1의 내적일 것입니다. 그리고 동일하게 두 번째 점수는 q1과 k2의 내적일 것입니다.


세 번째와 네 번째 단계는 이 점수들을 8로 나누는 것입니다. 이 8이란 숫자는 key 벡터의 사이즈인 64의 제곱 근이라는 식으로 계산이 된 것입니다. 이 나눗셈을 통해 우리는 더 안정적인 gradient를 가지게 됩니다. 그리고 난 다음 이 값을 softmax 계산을 통과시켜 모든 점수들을 양수로 만들고 그 합을 1으로 만들어 줍니다.
이 softmax 점수는 현재 위치의 단어의 encoding에 있어서 얼마나 각 단어들의 표현이 들어갈 것인지를 결정합니다. 당연하게 현재 위치의 단어가 가장 높은 점수를 가지며 가장 많은 부분을 차지하게 되겠지만, 가끔은 현재 단어에 관련이 있는 다른 단어에 대한 정보가 들어가는 것이 도움이 됩니다.


다섯 번째 단계는 이제 입력의 각 단어들의 value 벡터에 이 점수를 곱하는 것입니다. 이것을 하는 이유는 우리가 집중을 하고 싶은 관련이 있는 단어들은 그래도 남겨두고, 관련이 없는 단어들은 0.001 과 같은 작은 숫자 (점수)를 곱해 없애버리기 위함입니다.

마지막 여섯 번째 단계는 이 점수로 곱해진 weighted value 벡터들을 다 합해 버리는 것입니다. 이 단계의 출력이 바로 현재 위치에 대한 self-attention layer의 출력이 됩니다.

이 여섯 가지 과정이 바로 self-attention의 계산 과정입니다. 우리는 이 결과로 나온 벡터를 feed-forward 신경망으로 보내게 됩니다. 그러나 실제 구현에서는 빠른 속도를 위해 이 모든 과정들이 벡터가 아닌 행렬의 형태로 진행됩니다. 우리는 이때까지 각 단어 레벨에서의 계산과 그 이유에 대해서 얘기해봤다면, 이제 이 행렬 레벨의 계산을 살펴보도록 하겠습니다.

Self-attention 의 행렬 계산


가장 첫 스텝은 입력 문장에 대해서 Query, Key, Value 행렬들을 계산하는 것입니다. 이를 위해 우리는 우리의 입력 벡터들 (혹은 embedding 벡터들)을 하나의 행렬 X로 쌓아 올리고, 그것을 우리가 학습할 weight 행렬들인 WQ, WK, WV 로 곱합니다.


마지막으로, 우리는 현재 행렬을 이용하고 있으므로 앞서 설명했던 self-attention 계산 단계 2부터 6까지를 하나의 식으로 압축할 수 있습니다.

The Beast With Many Heads

본 논문은 이 self-attention layer에다 “multi-headed” attention이라는 메커니즘을 더해 더욱더 이를 개선합니다. 이것은 두 가지 방법으로 attention layer의 성능을 향상시킵니다:
1. 모델이 다른 위치에 집중하는 능력을 확장시킵니다. 위의 예시에서는 z1 이 모든 다른 단어들의 encoding 을 조금씩 포함했지만, 사실 이것은 실제 자기 자신에게만 높은 점수를 줘 자신만을 포함해도 됐을 것입니다. 이것은 “그 동물은 길을 건너지 않았다 왜냐하면 그것은 너무 피곤했기 때문이다” 과 같은 문장을 번역할 때 “그것”이 무엇을 가리키는지에 대해 알아낼 때 유용합니다.
2. attention layer 가 여러 개의 “representation 공간”을 가지게 해줍니다. 계속해서 보겠지만, multi-headed attention을 이용함으로써 우리는 여러 개의 query/key/value weight 행렬들을 가지게 됩니다 (논문에서 제안된 구조는 8개의 attention heads를 가지므로 우리는 각 encoder/decoder마다 이런 8개의 세트를 가지게 되는 것입니다). 이 각각의 query/key/value set는 랜덤으로 초기화되어 학습됩니다. 학습이 된 후 각각의 세트는 입력 벡터들에 곱해져 벡터들을 각 목적에 맞게 투영시키게 됩니다. 이러한 세트가 여러개 있다는 것은 각 벡터들을 각각 다른 representation 공간으로 나타낸 다는 것을 의미합니다.


multi-headed attention을 이용하기 위해서 우리는 각 head를 위해서 각각의 다른 query/key/value weight 행렬들을 모델에 가지게 됩니다. 이전에 설명한 것과 같이 우리는 입력 벡터들의 모음인 행렬 X를 WQ/WK/WV 행렬들로 곱해 각 head에 대한 Q/K/V 행렬들을 생성합니다.
위에 설명했던 대로 같은 self-attention 계산 과정을 8개의 다른 weight 행렬들에 대해 8번 거치게 되면, 우리는 8개의 서로 다른 Z 행렬을 가지게 됩니다.
그러나 문제는 이 8개의 행렬을 바로 feed-forward layer으로 보낼 수 없다는 것입니다. feed-forward layer는 한 위치에 대해 오직 한 개의 행렬만을 input으로 받을 수 있습니다. 그러므로 우리는 이 8개의 행렬을 하나의 행렬로 합치는 방법을 고안해 내야 합니다.


일단 모두 이어 붙여서 하나의 행렬로 만들어버리고, 그다음 하나의 또 다른 weight 행렬인 W0을 곱해버립니다.

Positional Encoding 을 이용해서 시퀀스의 순서 나타내기

우리가 이때까지 설명해온 Transformer 모델에서 한가지 부족한 부분은 이 모델이 입력 문장에서 단어들의 순서에 대해서 고려하고 있지 않다는 점입니다.
이것을 추가하기 위해서, Transformer 모델은 각각의 입력 embedding에 “positional encoding”이라고 불리는 하나의 벡터를 추가합니다. 이 벡터들은 모델이 학습하는 특정한 패턴을 따르는데, 이러한 패턴은 모델이 각 단어의 위치와 시퀀스 내의 다른 단어 간의 위치 차이에 대한 정보를 알 수 있게 해줍니다. 이 벡터들을 추가하기로 한 배경에는 이 값들을 단어들의 embedding에 추가하는 것이 query/key/value 벡터들로 나중에 투영되었을 때 단어들 간의 거리를 늘릴 수 있다는 점이 있습니다.
모델에게 단어의 순서에 대한 정보를 주기 위하여, 위치 별로 특정한 패턴을 따르는 positional encoding 벡터들을 추가합니다.

The Residuals

encoder를 넘어가기 전에 그의 구조에서 한가지 더 언급하고 넘어가야 하는 사항은, 각 encoder 내의 sub-layer 가 residual connection으로 연결되어 있으며, 그 후에는 layer-normalization 과정을 거친다는 것입니다.
이것은 decoder 내에 있는 sub-layer 들에도 똑같이 적용되어 있습니다. 만약 우리가 2개의 encoder과 decoder으로 이루어진 단순한 형태의 Transformer를 생각해본다면 다음과 같은 모양일 것입니다:

The Decoder Side



encoder가 먼저 입력 시퀀스를 처리하기 시작합니다. 그다음 가장 윗단의 encoder의 출력은 attention 벡터들인 K와 V로 변형됩니다. 이 벡터들은 이제 각 decoder의 “encoder-decoder attention” layer에서 decoder 가 입력 시퀀스에서 적절한 장소에 집중할 수 있도록 도와줍니다.
이 encoding 단계가 끝나면 이제 decoding 단계가 시작됩니다. decoding 단계의 각 스텝은 출력 시퀀스의 한 element를 출력합니다 (현재 기계 번역의 경우에는 영어 번역 단어입니다).

디코딩 스텝은 decoder가 출력을 완료했다는 special 기호를 출력할 때까지 반복됩니다. 각 스텝마다의 출력된 단어는 다음 스텝의 가장 밑단의 decoder에 들어가고 encoder와 마찬가지로 여러 개의 decoder를 거쳐 올라갑니다. encoder의 입력에 했던 것과 동일하게 embed를 한 후 positional encoding을 추가하여 decoder에게 각 단어의 위치 정보를 더해줍니다.

decoder 내에 있는 self-attention layer들은 encoder와는 조금 다르게 작동합니다:
Decoder에서의 self-attention layer은 output sequence 내에서 현재 위치의 이전 위치들에 대해서만 attend 할 수 있습니다. 이것은 self-attention 계산 과정에서 softmax를 취하기 전에 현재 스텝 이후의 위치들에 대해서 masking (즉 그에 대해서 -inf로 치환하는 것)을 해줌으로써 가능해집니다.

“Encoder-Decoder Attention” layer 은 multi-head self-attention 과 한 가지를 제외하고는 똑같은 방법으로 작동하는데요, 그 한가지 차이점은 Query 행렬들을 그 밑의 layer에서 가져오고 Key 와 Value 행렬들을 encoder의 출력에서 가져온다는 점입니다.

마지막 Linear Layer과 Softmax Layer


여러 개의 decoder를 거치고 난 후에는 소수로 이루어진 벡터 하나가 남게 됩니다. 어떻게 이 하나의 벡터를 단어로 바꿀 수 있을까요? 이것이 바로 마지막에 있는 Linear layer 과 Softmax layer가 하는 일입니다.

Linear layer은 fully-connected 신경망으로 decoder가 마지막으로 출력한 벡터를 그보다 훨씬 더 큰 사이즈의 벡터인 logits 벡터로 투영시킵니다.

우리의 모델이 training 데이터에서 총 10,000개의 영어 단어를 학습하였다고 가정하자 (이를 우리는 모델의 “output vocabulary”라고 부른다). 그렇다면 이 경우에 logits vector의 크기는 10,000이 될 것이다 – 벡터의 각 셀은 그에 대응하는 각 단어에 대한 점수가 된다. 이렇게 되면 우리는 Linear layer의 결과로서 나오는 출력에 대해서 해석을 할 수 있게 됩니다.

그다음에 나오는 softmax layer는 이 점수들을 확률로 변환해주는 역할을 합니다. 셀들의 변환된 확률 값들은 모두 양수 값을 가지며 다 더하게 되면 1이 됩니다. 가장 높은 확률 값을 가지는 셀에 해당하는 단어가 해당 스텝의 최종 결과물로서 출력되게 됩니다.

Loss Function

학습이 시작될 때 모델의 parameter들 즉 weight들은 랜덤으로 값을 부여하기 때문에, 아직 학습이 되지 않은 모델은 그저 각 cell (word)에 대해서 임의의 값을 출력합니다. 이 출력된 임의의 값을 가지는 벡터와 데이터 내의 실제 출력값을 비교하여, 그 차이와 backpropagation 알고리즘을 이용해 현재 모델의 weight들을 조절해 원하는 출력값에 더 가까운 출력이 나오도록 만듭니다.

그렇다면 두 확률 벡터를 어떻게 비교할 수 있을까요? 간단합니다. 하나의 벡터에서 다른 하나의 벡터를 빼버립니다. cross-entropy 와 Kullback–Leibler divergence를 보시면 이 과정에 대해 더 자세한 정보를 얻을 수 있습니다.

퀴즈 결과 회고

[AI Math 10강 퀴즈] RNN 첫걸음-1~5

  1. 다음 보기 중 시퀀스 데이터와 가장 거리가 먼 데이터를 고르시오. (O)
  • ans : 이미지 데이터
  1. 다음과 같은 시퀀스 데이터 X가 주어졌을 때, 다음 보기 중 베이즈 법칙에 따라 전개한 X에 대한 확률분포를 고르시오. (O)
  • ans : 2
  1. RNN의 잠재변수는 다음 순서의 잠재변수를 모델링하기 위한 입력 값으로 사용될 수 있는가? (O)
  • ans : 예
  1. 시퀀스 길이가 길어지는 경우, Vanila RNN에서 발생할 수 있는 기울기 소실문제를 해결하기 위한 방안이 아닌 것을 고르시오. (O)
  • ans : CNN (Convolutional Neural Network)
  1. BPTT를 통해 RNN의 가중치행렬의 미분을 계산했을 때, 아래 식의 항들 중 시퀀스 길이가 길어졌을 때 불안정해지기 쉬운 항을 고르시오. (O)
  • ans : 2

Further Question

LSTM에서는 Modern CNN 내용에서 배웠던 중요한 개념이 적용되어 있습니다. 무엇일까요?

  • Skip-Connection of ResNet
  • Concatenation of DenseNet

Pytorch LSTM 클래스에서 3dim 데이터(batch_size, sequence length, num feature), batch_first 관련 argument는 중요한 역할을 합니다. batch_first=True인 경우는 어떻게 작동이 하게되는걸까요?

  • If your input data is of shape (seq_len, batch_size, features) then you don’t need batch_first=True and your LSTM will give output of shape (seq_len, batch_size, hidden_size).
  • If your input data is of shape (batch_size, seq_len, features) then you need batch_first=True and your LSTM will give output of shape (batch_size, seq_len, hidden_size).

Pytorch에서 Transformer와 관련된 Class는 어떤 것들이 있을까요?

  • 링크 참고

피어 세션 정리

강의 리뷰 및 Q&A

  • [AI Math 10강] RNN 첫걸음
  • [DLBasic] Sequential Models - RNN
  • [DLBasic] Sequential Models - Transformer

[개인] GRU vs LSTM

Empirical Evaluation of Gated Recurrent Neural Networks on Sequence ModelingAn Empirical Exploration of Recurrent Network Architectures에 따르면, 명확한 승자는 없습니다.
대부분의 작업에서 GRU와 LSTM 모두 유사한 성능을 보이기 때문에, 아키텍처를 선택하는 것보다 하이퍼 파라미터 튜닝이 더 중요할 수 있습니다.
GRU는 파라미터가 적기 때문에 좀 더 빠르게 훈련하거나 데이터가 적게 필요할 수 있습니다.
반면에, 데이터가 충분하다면, LSTM의 성능이 더 좋을 수 있습니다.

과제 진행 상황 정리 & 과제 결과물에 대한 정리

[DLBasic] LSTM Assignment

LSTM(Long Short-Term Memory models)에 대한 것으로, 어렵지 않게 해결했습니다.

[DLBasic] Multi-headed Attention Assignment

Multi-headed Attention에 대한 것으로, 어렵지 않게 해결했습니다.

부스트캠프 수료생과의 랜선 MeetUP!

오프닝 및 연사소개

  • 부스트캠프 5기 수료생 - 오지현님
  • 휴면스케이프 소속
  • Software Developer (Rarenote cell)

'부스트캠프를 최대한 활용하기 위한 노하우' (연사 - 오지현)

  1. 부스트캠프를 시작했다.
  • 1.1. 이론 학습? 프로젝트 경험? 개발자 인맥? 취업?
    • 이 모든 것을 단 5개월 만에, 전부 다 드립니다.
  • 1.2. 지속 가능한 개발자가 될 수 있을까?
    • 어떻게 하면 5년, 10년 뒤에도 개발을 즐기고 성장할 수 있을까?
      • 함께하는 개발의 즐거움을 깨닫자.
      • 좋은 분위기는 사람을 좋게 만들어요.
      • 어..? 어...? 됐냐....???
      • 스스로 공부하는 방법을 깨닫자.
      • 공식 문서, StackOverflow를 잘 읽어봅시다.
      • 좋은 질문을 하는 법
  1. 부스트캠프는 험난했다.
  • 2.1. 내 옆 사람은 저렇게 잘 하는데, 나는 왜...
    • 하지 않으려고 해 봐도, 피할 수 없는 고민
    • 매일 아침 반복되는 화상 회의
    • 저 사람은 코드가 정말 이쁘네...
    • 저 사람은 속도가 정말 빠르네...
    • "위를 보지 말고 옆을 봐라"
      • 생각보다 비슷한 고민을 하는 사람이 많아요.
      • 어쩌면 옆을 보는 것보다 앞을 보는게 좋을지도...
  • 2.2. 알아야 할 건 많은데 내가 아는 건 없네.
    • 맛집을 잘 알려주지만, 밥을 사주지는 않아.
    • 넓고 얕게 알려주는 강의
      • 주 1~2회, 한 번에 길어야 2시간
      • 코어 타임 총 40시간, 그런데 왠지 70시간은 필요한 듯
    • 지금 다 소화하지 못해도, 다시 돌아올 기회
      • 계속 하다 보면 이해되는 것도 있습니다.
      • 어차피 취업 준비나 일을 하다 보면 다시 보게 됩니다.
  1. 그래도 부스트캠프에서 끝까지 갔다
  • 3.1. 중도 하차 신청, 보류했습니다.
    • 나를 괴롭게 하는 건 사실 나야
    • 너무 힘들어서 정말 포기하려고 했으나...
      • 처리 직전에 운영진께서 DM을 보냈습니다 (감동)
      • 부담감을 어떻게든 떨쳐 보자
    • "본인이 감당할 수 있는 페이스로 천천히 해보세요."
      • 같이 하는 일정만이라도 잘 챙기기 가끔은 코어타임에도 놀고
      • 늦게 자기 : 만악의 근원
  • 3.2. 즐거운 회사생활을 시작하기까지
    • 네트워킹데이로 만들어진 소중한 인연
    • 이력서? 이제는 자신있다!
      • 예전보다 탄탄해진 웹 개발의 기초
      • 실무 환경과 유사한 프로젝트 경험
    • 끝까지 참여했기에, 얻을 수 있었던 기회
      • 이런 회사가 있는 줄도 몰랐는데...

Q&A(사전질문 + 실시간)

  1. 성공적으로 수료를 마치신 분들의 과거 부스트캠프에서 하루 일과가 궁금해요! (밤을 새시면서.. 풀코딩모드??)
  • 코어 타임은 19:00가 마치는 시간이지만, 20:00 ~ 01:00까지 공부를 했었다.
  1. 부스트캠프 AI Tech를 진행하면서 이미 경험이 많아 잘하시는 분들이 많은데.. 혹시 부스트캠프 웹/모바일 분야에서도 경험이 많으신 분들이 계속 잘 하셨나요? (AI-tech는 수학적인 지식과 다른 선수지식이 많은 분들이 이해도 더 깊게 하시는 것 같아요 - 물론 더 많이 노력을 하시겠지만...)
  • 경험의 차이를 무시할 수는 없으나, 충분히 극복할 수 있다.
  1. 후에 프로젝트 진행할 때, 얼마나 여유가 없는지 궁금합니다!
  • 케이스 바이 케이스이긴 하지만, 하다 보면 욕심이 생기면서 자발적으로 프로젝트를 진행하게 된다.
  1. 피어세션을 어떻게 활용하셨는지 궁금합니다.
  • 개발적인 측면에서는 코드 리뷰를 적극적으로 할 수 있는 시간이었다. 너무 공부 이야기만 하는 것이 아니라, 잡담을 하면서 멘탈을 회복하는 것도 좋은 방법이다.
  1. 학습정리를 무엇을 위주로, 어떤 방법으로 하셨는지 궁금합니다. 또, 학습정리에 소요되는 시간이 너무 많은데 효율적으로 작성하는 팁이 있을까요?
  • 노션 또는 기술 블로그에 작성하면 좋다. 학습 내용이 많기 때문에, 전부 정리하기 보다는 url를 첨부하고 요갹 정도만 해도 좋을 것 같다.
  1. 내가 부스트캠프 진도보다 뒤쳐진다고 느껴질 때, 부담감을 많이 느끼셨을텐데 마인드컨트롤은 어떻게 하셨나요?
  • 본인도 마인드컨트롤을 실패한 경험이 있어, 부담없이 했으면 좋겠다.
  1. 부스트캠프에서 처음부터 잘 하셨나요? 그리고 부스트캠프에서 가장 중요시 생각하고 임했던 것이 무엇인지 궁금합니다.
  • 회사가 채용할만한 개발자가 되려고 노력했다.
  1. 시작할 때와 수료할 때 변화가 궁금하고 부스트캠프에서 얻은 것 중에 가장 중요한 것이 무엇인지 궁금합니다.
  • 다양한 기술스택을 다시 재정비할 수 있었고, 아는 것과 모르는 것을 구분할 수 있게 되었다.
  1. 취업에 있어 부스트캠프에서 하는 여러 활동들을 어떻게 활용하셨는지 자세히 답변해주시면 감사하겠습니다.
  • 네트워킹 데이를 활용할 수 있어서 너무 좋았다. 부스트캠프를 통해서 이력서를 풍성하게 만들었다. 그 뿐만 아니라, 스터디를 통해서 코딩테스트를 준비하면 좋을 것 같다.
  1. 네트워킹데이때 어떤회사들이 왔는지 궁금합니다.
  • 현재 확정적으로 말씀드리기에는 무리가 있다.
  1. 부캠진행하면서 후회되는점 있나요? 이걸 더 했으면 더 성장했을텐데와 같은 (ex, 과제 열심히 할껄, 학습정리 잘할껄)
  • 부담감을 너무 많이 가지고 진행을 했던 점이 아쉬웠다.

총평

오늘 강의의 하이라이트는 Attention과 Transformer입니다.
강의를 여러 번 돌려 보았음에도, 쉽사리 이해가 되지 않아 학습 정리도 못다한 상태입니다.
어려운 내용이지만, 최근 딥러닝에서 자주 사용되는 이론인 만큼 이참에 제대로 공부해야겠습니다.

오늘보다 더 성장한 내일의 저를 기대하며, 내일 뵙도록 하겠습니다.

읽어주셔서 감사합니다!

profile
PLUS ULTRA

0개의 댓글