반응형

 

 

 

NER(Named Entity Recognition)


문장에서 이름들을 찾고, 분류하는 태스크이다.

예1) Paris(PER) Hilton(PER) wowed in a sequin gown.

예2) Samuel(PER) Quinn(PER) was arrested in the Hilton(LOC) Hotel(LOC) in Paris(LOC) in April(DATE) 1989(DATE).

-> Paris가 지역이 아닌 사람 이름이라는 것을 분류하기 위해서는 "context"를 고려해야 한다.

 

 

 

Simple NER


아이디어 : 주변 단어들의 문맥 안에서 각각의 단어를 분류한다.

- logistic classifier를 학습시킨다.

- 단어 벡터들을 concatenate한 것을 바탕으로 center word를 분류한다.

 

 

 

 

Gradients


n개의 input과 1개의 output이 있는 f(x) = f(x1, x2, ..., xn) 이 있을 때,

f(x)의 미분값은 각각의 input들의 편미분의 벡터이다.

 

 

 

Jacobian Matrix: Generalization of the Gradient


n개의 input과 m개의 output이 있는 f(x) = [f1(x1, x2, ..., xn), ..., fm(x1, x2, ..., xn)] 이 있을 때,

f(x)의 미분값은 편미분들의 m x n 행렬이다.

 

 

 

Question


- logistic인지? softmax인지?

 

 

 

 

 

 

 

 

반응형

'AI > CS224n' 카테고리의 다른 글

Lecture 4 - Syntactic Structure and Dependency Parsing  (0) 2022.08.03
Lecture 2 - Neural Classifiers  (0) 2022.07.19
Lecture 1 - Intro & Word Vectors  (0) 2022.07.13
반응형


Lecture 2
Word Vectors, Word Senses, and Neural Network Classifier

# Word2vec parameters and computations

### bag of words


각각의 단어 벡터를 구하고, outside 벡터와 center 벡터를 dot product한 다음, softmax로 결정한다.
이것은 bag of words 모델로, 단어의 순서를 고려하지 않는 모델이다.


### Word2vec은 비슷한 단어들을 가까이 둠으로써 목적함수를 최대화할 수 있다.


# Optimization : Gradient Descent
- 비용함수를 최소화해야 한다.
- Gradient Descent는 기울기를 변형함으로써 비용함수를 최소화할 수 있다.
- Update Equation


### 문제 : 모든 windows들에 함수를 적용하기 때문에 굉장히 비용이 크다.
- 해결책 : Stochastic gradient descent
-> 배치로 뽑아서 각각 업데이트하는 방식
- 일반적으로 row가 단어 하나의 벡터이다.


### Word2vec detail
두 가지 모델 방식
1) Skip-gram
2) Continuous Bag of words(CBOW)



Skip gram : center word가 주어지고, other words 예측
Cbow : other words가 주어지고, center word 예측

Skip gram model with Negative sampling
Object function은 center와 others를 dot product
: softmax -> logistic / sigmoid (0-1사이로 만듬)
- 실제 outside words가 나타날 확률을 늘리고
- 랜덤 words가 center word 주위에 나타날 확률을 줄인다
- Unigram 분포에 따라 샘플링한다 -> 적게 나오는 단어가 더 자주 나오게 함 -> 왜?


Co-occurrence vectors
- simple count co-occurrence vectors : 공간낭비, 고차원임 -> skip gram, cbow
- Low-dimensional vectors : 차원을 어떻게 더 줄일까? 고민

차원 줄이기(hw1)
- x = u * £ * vt
- U와 v는 가로세로 동일
- U와 v 사이즈 안 맞는 부분은 무시

Vector 차이로 의미를 인코딩하기
: Co-occurence 확률의 비율이 곧 의미가 될 수 있다

Word vector 구하기
- intrinsic : 단어 하나하나 평가, 빠르게 구함, vector간의 cosine distance로 유사도 구함, 만약 단어들간의 관계가 linear가 아니라면?
- Extrinsic : 실제 태스크에서 평가, 시간이 많이 걸릴 수 있음

성능 semantic > syntactic
Dimensional은 300 개 정도면 된다

동일 단어에 여러 뜻이 있는 경우에는
1)다른 벡터를 가지기도록 할 수 있음
2)linear algebraic하기 합쳐서 한 벡터로 표현할 수 있음


# 샘플을 왜 뽑아요?
# unigram 왜?

반응형

'AI > CS224n' 카테고리의 다른 글

Lecture 4 - Syntactic Structure and Dependency Parsing  (0) 2022.08.03
Lecture 3 - Backprop and Neural Networks  (0) 2022.07.27
Lecture 1 - Intro & Word Vectors  (0) 2022.07.13
반응형

 

 

 

 

질문을 SQL문으로 변환

 

# 단어의 뜻을 어떻게 표현할까?

- 단어, 문맥으로부터 표현

- 사람이 표현하려는 방향으로

- 예술과 글쓰기의 방식으로

 

# 컴퓨터에서는 어떻게 단어를 해석할까?

- 일반적인 NLP 솔루션 : WordNet

Wordnet은 동의어 세트로 구성되어 있음

- Wordnet의 문제

: 뉘앙스가 생략됨

: 새로운 뜻을 놓침 -> 새롭게 정의된

: 단어간의 유사성을 측정하기 힘듦

 

# 전통적인 머신러닝 기반 NLP : discrete symbols

에서는 각각의 단어를 분리적으로 생각하고 본다.

one-hot vector로 보기 때문에 단어 간 유사성을 계산할 방법이 없다.

 

 

# Context

하나의 단어가 주어질 때, 항상 context(즉, 문맥)을 고려해야 한다.

단어를 벡터로 표현할 수 있다. 비슷한 벡터는 비슷한 문맥을 가진다고 볼 수 있다.

 

 

 

 

# Word2vec 알고리즘


- 우리는 text의 corpus(신체)를 가지고 있다

- 모든 단어는 벡터로 표현될 수 있다

- 각각의 위치 t는 center word(c)와 context(o)를 가지고 있다.

- c(center)가 있는 하에서(조건부) o(outside)의 확률을 계산하기 위해 단어 벡터들 간의 유사성를 사용한다.

- 이 확률을 높이기 위해 단어 벡터를 계속해서 조정한다.

 

# 확률 계산법 : obejctive function

likelihood 는 각각의 포지션 t에 대해서, 각각의 center word에 대해서 확률을 구한다.

objective function은 likelihood에 평균 negative log를 취한 것으로,

목적 함수가 적을 수록(= 예측 정확도가 높을수록) 좋다.

 

 

 

# prediction function

1) o와 c의 유사도를 비교하기 위해 Dot product를 한다. (높은 dot product = 높은 확률)

3) 확률 분포를 구하기 위해 전체 단어로 normalize한다.   

* softmax 함수는 모든 값을 0에서 1 안에 들어오게 한다.

즉, 임의의 xi 값을 확률 분포인 pi로 매핑해준다.

- max : 가장 큰 값을 증폭시키기 때문에

- soft : 작은 값들에게도 확률값을 할당하기 때문에

 

 

# model을 학습하기 : loss를 최소화하기 위해 파라미터를 최적화

d : 몇차원인지, : 단어의 개수, V 2 : center vector와 contect vector

 

 

 

# 수식

 

https://samtoring.com/str/qstn/QST0009103

 

 

결론

 

 

# 코드로 보기

man : king = woman : queen

 

 

# 궁금한 점

- corpus란?

- 각 단어들의 벡터는 어떻게 구하는지?

 

반응형

'AI > CS224n' 카테고리의 다른 글

Lecture 4 - Syntactic Structure and Dependency Parsing  (0) 2022.08.03
Lecture 3 - Backprop and Neural Networks  (0) 2022.07.27
Lecture 2 - Neural Classifiers  (0) 2022.07.19
반응형

 

 

one to many : Image Captioning

many to one : sentiment classification

many to many : machine translation

 

 

# RNN(Recurrent Neural Network)


1) Vanilla RNN

ht를 구할 때, ht-1가 영향을 준다는 것이 핵심이다.

* 왜 tanh 쓰는지?

 

 

2) Computational Graph

 

BACK PROP에서는 각각의 w를 sum함.

 

* Many to Many

Loss도 다르게 할 수 있음

 

 

 

 

* One to many

 

 

* seq to seq : many to one + one to many

 

 

 

# Example : Character-level Language model


many to many

* softmax 는 숫자 벡터를 확률 벡터로 만들어주는 함수

- sigmoid : binary-classification에서 사용 -> 총합이 1 아님 -> 값이 큰 출력값이 그 클래스에 해당할 가능성이 높음
- softmax : multi-classification에서 사용 -> 총합이 1 -> 클래스별 기여도 측정

[출처] Softmax vs Sigmoid|작성자 JINSOL KIM

 

 

# Truncated Back Prop

모든 데이터를 한번에 back prop하기 어렵기 때문에

sub sequence씩 back prop 하는 trick.

 

 

 

 

 

 

# Image Captioning

CNN + RNN

 

 

 

# Visual Question Answering

 

 

 

# Vanilla RNN Gradient Flow


ht = tanh(Whh * ht-1 + Wxh * xt)

* make it sequence

h0의 gradient는 W의 여러 요소들을 포함한다.

1) Exploding gradient problem : Largest singular value > 1

-> Gradient clipping

 

2) Vanishing gradient problem

-> change RNN architecture -> LSTM

 

 

# LSTM


4개의 게이트 이용한다.

input gate : 얼마나 input하고 싶은지 -> sigmoid(0~1)

forget gate : 얼마나 잊고 싶은지 -> sigmoid(0~1)

output gate : 얼마나 표현(output)하고 싶은지 -> sigmoid(0~1)

gate gate(?) : input cell에 얼마나 쓰고 싶은지 -> tanh(-1~1)

-> 4가지 게이트는 각각 다른 non linearity를 사용한다.

 

 

* LSTM 자세히 보기

 

 

** Backpropagation

에서 W를 사용하지 않고 Cell state 만 가지고 한다. -> computational efficiency

+ tanh 계산을 하지 않아도 된다.

+ forward시에 cell state 계산할 때 W도 관여를 했으므로 back prop 시에도 W가 고려가 된다.

 

 

반응형
반응형

 

 

# 오늘 배울 내용

- CPU vs GPU

- Deep Learning Frameworks 

 

# CPU vs GPU


GPU : rendering, video game을 위해서 제작된 것

 

 

 

 

 

 

 

 

반응형
반응형

 

 

# 이전 강의 복습


sigmoid는 vanishing gradient라는 문제점이 있었다.

ReLU를 대부분 선택하는데, 잘 작동하기 때문이다.

 

 

 

weight 초기화


초기 weight가 너무 작으면 activation이 0으로 되고 gradient도 0가 되고 학습이 진행되지 않는다.

초기 weight가 너무 크면 activation이 saturate(뭐라고 해석해야하지)되고 gradient도 0이 되고 학습이 진행되지 않는다.

초기 weight를 적당하게 하려면 Xavier나 MSRA 초기화를 활용할 수 있다.

 

 

 

Data preprocessing


normalization(정규화 -> 데이터를 0에서 1 사이로)를 해준다.

정규화를 하지 않으면 loss가 가중치의 변화에 너무 민감하게 반응한다.

반면, 정규화를 해주면 데이터가 0에서 1 사이로 정규화되기 때문에 가중치에 덜 민감하게 loss가 반응하게 되어 학습에 용이하다.

 

 

Batch Normalization


중간의 activation들의 평균이 0이 되고, 분산이 1이다.

이거 해석...좀....

 

 

Babysitting Learning


Learning Rate에 따라서 달라지는 1) loss 그래프,

training set에 과적합되어 있어 보이는 3) Accuracy 그래프 -> Regularization(weight에 패널티 부여)이 필요해 보인다.

 

 

하이퍼파라미터 찾기


1) Grid Layout

2) Random Layout -> 이론적으로 이게 더 나음

 

 

 

# 오늘 배울 내용


- optimization

- Regularization

- Transfer Learning

 

 

# Optimization


그림의 x축은 가중치1, y축은 가중치2이다.

loss function을 가장 줄여주는 빨간색 부분을 찾아가는 것이 optimization이다.

아래 코드는 SGD를 표현한 것이다.

gradient를 loss function, data, weight를 가지고 판정한 다음, step size(=Learning Rate)와 곱하여 

기존의 weight에서 빼준다. (loss이기 때문에)

 

SGD의 문제점


- 만약, loss 변화가 한 방향에서만 빠르고 나머지에서는 느리다면? gradient descent는 어떻게 될 것인가?

얕은 차원에서는 매우 느리고, 가파른 차원에서는 ??

- local minima or saddle point 문제

: 중간에 멈춰버린다. 

* 고차원 문제로 가면 saddle point가 거의 대부분의 지점에서 일어나므로 사실상 의미가 없다.

- 모든 데이터를 사용하는 것이 아니라, 미니 배치로 일부를 가지고 하는 것이기 때문에 진짜 정보를 활용하지 못한다. 노이즈를 갖게 된다.

 

 

# 해결책 : Momentum


* rho는 일반적으로 0.9나 0.99이다.

velocity(vx)를 gradient의 평균으로서 계속해서 빌드업한다. <- 핵심

velocity에는 이전 gradient들이 축적되어 있으므로 gradient가 매우 작은 부분이더라도 velocity가 있으므로 멈추지 않는다.

1) local minima나 saddle point에서 멈추지 않고 계속해서 나아갈 수 있는 힘이 생긴다.

2) 또한, gradient 추정치가 평균되어 노이즈가 적어지는 장점이 있다.

 

 

# Nesterov Momentum

*convex optimization에서는 좋은 이론적 특징을 가지고 있지만, non-convex 문제에서는 쓸모가 없어진다.

 

* https://wikidocs.net/17206

 

 

 

 

 

# Adagrad


* 계속해서 학습이 진행되면?

grad_sqaured가 엄청 켜져서 x 는 거의 사라진다.

 

 

# RMSProp


Adagrad 문제를 좀 더 늦춘다.

SGD+Momentum보다 RMSProp이 더 느리지만, 정확하게 간다. SGD+Momentum은 도착해서 휘어지는것을 볼 수 있다.

 

 

# Adam(제일 많이 씀)


Momentum + RMSProp

Adam이 좀 더 휜다.

 

 

 

# decay Learning rate


처음에는 decay 없이 하고, decay 어떻게 넣을지 보기

 

 

 

# BFGS


- First-order optimization

 

- Second-order optimization

-> Learning rate가 없다는 장점있다.

하지만, non-convex 문제에서는 잘 작동하지 않으므로, 잘 쓰지 않는다.

 

 

So, Adam을 디폴트로 쓰고, 풀배치로 돌릴 수 있다면 L-BFGS를 사용할 것.

 

 

# 추가적인 tips

- ensemble

- regularization : Dropout, Batch normalization, Data augmentation, fraction max pooling

 

# Dropout

랜덤하게 뉴런을 0으로 지정하여 삭제한다.  -> 피쳐들간의 co-adaptation을 막아준다. overfitting 막아준다.

fully connected layer나 convolutional layer에서 많이 사용한다.

 

Dropout : Test time -> 결과가 일관되지 않으므로 성능이 좋지 않음.

 

# General Dropout

 

# Trick -> Inverted dropout

GPU가 좀 더 쉽게 학습할 수 있게 하도록.

 

* batch normalization도 비슷한 작용을 하기 때문에 Dropout과 Batch normalization을 동시에 사용할 필요가 없을 때가 있다.

하지만, Dropout은 batch normalization와 다르게 p값으로 normalization 정도를 조정할 수 있다는 장점이 있다.

 

 

 

# Data Augmentation

데이터를 다양하게 시도해볼 수있도록 해준다. train/test에 모두 해줄 수 있다. 

 

# Fractional max pooling

랜덤으로 맥스 풀링 적용

 

 

# Transfer Learning 


 

 

 

 

 

 

반응형

+ Recent posts