본문 바로가기
AI 관련/cs224n

CS224N Language Models and Recurrent Neural Networks (win 2021)

by 세계 최고의 AI Engineer_naknak 2023. 10. 11.

 

공부하면서 스터디 모임을 하는 동안 배웠고 가져가면 좋겠다고 느낀 부분들을 정리하도록 하겠습니다.

 

추후 공부해야 할 내용 ( torch 를 다루는 부분 입니다)

https://colab.research.google.com/drive/1Z6K6nwbb69XfuInMx7igAp-NNVj_2xc3?usp=sharing 

 

CS224N PyTorch Tutorial.ipynb

Colaboratory notebook

colab.research.google.com

 

 

Non-linear function 즉, activation function으로 인해 선형이었던 그래프는 비선형성을 가지게 되고 더 많은 데이터를 더 정확하게 구분할 수 있게 되었습니다.

(*비선형함수 : 전체의 구간에서 하나로 설명이 안된다. + 신경망의 함수를 근사하게 해주며 다양한 형태와 복잡성을 근사해준다.)

 

 

2. A bit more about neural networks

이 Neural Network를 어떻게 초기화 시킬 것이냐!

 

 

Regularization

정규화는 L1, L2 가 있죠. 본 강의에서는 L2 를 사용했습니다.

저기 regularization term을 추가한 게 full loss function이라고 한다고 합니다.

λ의 값이 증가하면 그만큼 가중치 값이 감소해야 하므로 모델이 단순화되고

λ의 값이 감소하면 그만큼 가중치 값이 증가해야 하므로 모델이 복잡화됩니다.

 

Regularization으로 overfitting을 막는 것도 맞지만 더 중요한 건 큰 모델이 일반화를 더 잘하도록 만들어주는 거라고 합니다.

 

 

Dropout

뭔가 많지만 요약하자면 Dropout은 학습되는 뉴런을 50%씩 꺼줍니다. 

이렇게 함으로써 feature co-adaptation 을 방지합니다. 저희가 이해한 feature co-adaptation은 약육강식으로 특징이 분명한 feature가 다른 뉴런에도 크게 작용해서 다른 feature를 생성할 때 영향을 미칠 수 있다 입니다. (아닐 수도 있습니답!)

또 요즘은 그냥 정규화를 하지 않고 feature-dependent 정규화로 feature가 사용되는 정도에 따라 정규화 되는 정도가 달라진다고 하시네요. 뭐 아무튼 Dropout 을 여러 배치로 학습 시켜서 모든 모델의 가중치가 학습되게 되고 앙상블 효과도 노릴 수 있으니 적용시키지 않을 이유가 없죠.

 

 

 

 

 

Parameter Initialization

W 가중치를 0 이나 상수로 초기화 하면 뉴런이 동일한 특성을 학습하게 된다.

그러니까 결국 출력이 동일하게 된다 (내적을 생각하면 이해 할 수 있다) 그러니까 모두 동일한 그래디언트를 가지게 되고 뉴런을 여러 개 만드는 이유가 사라지게 된다. 

그래서 Xavier 나 He 초기화를 사용해주어야 한다. 

이때 symmetries를 피해야 한다고 하신다. 이때 대칭을 의미하는 symmetries 는 가중치의 대칭을 의미한다.

여기서 대칭이 되면 패턴의 주기성을 학습하기 때문에 여기서 symmetries는 피해야 한다. 왜냐면 여기서 symmetries은 필요 없기 때문이다. (다양한 정보를 학습시켜주기 위해서 입니다.)

잘 기억하자. 있다가 이 개념이 다시 나오는 데 그때 헷갈린다.

 

 

 

Learning Rates

1. 초기 LR을 고정시키는 방법

2. 초기 LR을 고정시키는 방법 + shrinks 수축 ( Adam이 이걸 많이 사용한다고 한다.)

 

Data 를 shuffle or sample 로 넣는 방법에 대해서 나오는 데 여기서 shuffle 로 하지 않으면 모델이 훈련 데이터에서 패턴 주기성을 일종의 패턴으로 학습하기 때문에 성능이 떨어진다.

 

 

 

 

Optimizer

많이 있지만 보통 Adam을 많이 사용한다.

얼마나 많이 slope, gradient를 조정하느냐 그래서 weight 를 얼마나 수정하느냐? 이걸 구하는 Optimizer 되시겠다.

 

 

 

 

3. Language Modeling + RNNs

중요하다고 하셔서 넣었다. LM은 결국 다음 올 단어를 예측하는 것이다.

예측은 확률을 사용해서 한다고 한다.

 

그 방법으로 n-gram Language Models, deeplearning 을 이용한 Neural Network 가 있다. 

 

n-gram Language Models 제목 그대로 문장을 n-gram 단위로 나눠서 Table 에 나온 횟수를 count 한다. 그리고 다음 나올 단어를 통계적으로 가장 높은 확률인 단어를 선택해서 혹은 sample로 뽑아서(아마 무작위가 아닐까 싶습니다) 출력하는 거라고 생각하시면 될 거 같습니다.

네, 그렇답니다. 그니까 t +1번째 단어를 예측하려면 t를 포함해서 n-gram 만큼 그 단어를 Table 에 비교한 뒤 해당 count를 가져와서 확률을 구합니다.

네 그래서 이렇게 다음 단어를 예측하는데 problem과 solution 도 있는데 그건 그냥 그렇구나 하시고 넘어가셔도 될듯?

 

 

 

그러면 이제 어떻게 Neural LM으로 예측하는 지 볼까요?

고정된 window 사이즈 만큼의 단어를 가져와서 다음 단어를 예측 할 수 있도록 해줍니다. 앞에서 언급된 Sparsity 문제와 storage 문제는 해결했지만 window 사이즈를 키우기 어려운 단점이 있고 여기서 각 위치 (t) 별로 W 가중치가 다르기 때문에 ((이때 이걸 No symmetry 라고 합니다.)) 문장의 유사한 패턴을 n 만큼의 W가 학습을 하는 비효율적인 문제가 발생하게 됩니다.

 

이때 저 e는 단어 임베딩을 해주는 가중치인데 이게 No symmetry 해야 비슷한 위치에 있는 비슷한 패턴을 효과적으로 학습이 가능해집니다. 그래서 단어 임베딩 때는 가중치가 No symmetry 해야 한다는 것이죠. 왜냐면 단어 임베딩에서는 다양한 정보도 학습해야 하지만 단어끼리 가진 패턴을 학습 시켜야 동일한 단어끼리 유사한 벡터 공간에 모일 수 있기 때문이 아닌가 싶습니다.

 

또한 각 위치에 대한 정보를 W 가중치가 가지고 있어야 하기 때문에 고정적인 input data만 학습 시킬 수 있다는 단점이 있죠.

 

그래서 나온 녀석이 바로 RNN 입니다.

 

 

Recurrent Neural Networks RNN

이 친구는 시점마다 가중치를 주지 않고 동일한 가중치를 줘서 계산을 효율적으로 바꿨습니다. 그래서 위의 fixed window Neural Network와 다르게 가변적인 데이터를 활용할 수 있고 과거의 정보까지 저장해서 계산 할 수 있습니다.

 

 

정리한 Shape 입니다. 참고하세요 ㅋㅋㅋㅋ

'AI 관련 > cs224n' 카테고리의 다른 글

CS224N Dependency Parsing (win 2021)  (1) 2023.10.06

댓글