반응형

 

 

 

 

질문을 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 


 

 

 

 

 

 

반응형
반응형

 

 

# 논문 링크입니다.

https://arxiv.org/abs/1506.02640

 

You Only Look Once: Unified, Real-Time Object Detection

We present YOLO, a new approach to object detection. Prior work on object detection repurposes classifiers to perform detection. Instead, we frame object detection as a regression problem to spatially separated bounding boxes and associated class probabili

arxiv.org

 

 

 

0. Title


You Only Look Once: Unified, Real-Time Object Detection

-> 넌 한번만 본다?

통합되고 리얼타임인 객체탐지 모델인가 봅니다...

 

 

 

1. Abstract


object detection의 새로운 접근법인 YOLO를 소개하려고 한다.

이전 연구들은 분류기를 탐지를 위해서 사용해왔다.

하지만, 우리는 객체 탐지를 공간적으로 분리된 바운딩 박스와 관련된 클래스 확률을 회귀 문제로 생각하였다.

단일 뉴럴 네트워크는 바운딩 박스와 클래스 확률을 한 평가에서 풀 이미지로부터 직접 예측한다.

전체 탐지 파이프라인이 하나의 네트워크이기 때문에 end-to-end로 최적화될 수 있다.

 

우리의 통합된 아키텍처는 매우매우 빠르다.

YOLO는 지역적인 에러를 만들기는 하지만, 배경에서 틀린 것을 맞다고 예측하는 것이 적다는 장점이 있다.

마지막으로, YOLO는 물체의 일반적인 표현을 학습한다.

YOLO는 R-CNN보다 성능이 좋다.

 

Figure 1: The YOLO Detection System

 

 

 

 

 

 

반응형
반응형

 

 

 

# 논문 링크입니다.

https://arxiv.org/abs/1504.08083

 

Fast R-CNN

This paper proposes a Fast Region-based Convolutional Network method (Fast R-CNN) for object detection. Fast R-CNN builds on previous work to efficiently classify object proposals using deep convolutional networks. Compared to previous work, Fast R-CNN emp

arxiv.org

 

 

 

0. Title


Fast R-CNN

-> R-CNN을 사용하고, 빠른가보다...

 

 

1. Abstract


이 논문은 빠른 object detection에서 사용되는 Region-based 컨볼루션 네트워크를 제안한다.

Fast R-CNN은 딥한 컨볼루션 네트워크를 사용한 객체 proposal을 효율적으로 분류하기 위해 이전의 연구에 바탕으로 하고 있다.

이전 연구와 비교해서,

Fast R-CNN은 학습과 테스트 속도를 향상시키는 동시에 detection 정확도를 높이기 위해 여러가지의 혁신을 했다.

 

 

 

2. Introduction


최근에 딥한 ConvNet은 이미지 분류와 객체 탐지에서 훌륭한 성과를 보이고 있다.

이미지 분류와 다르게 객체 탐지는 더 복잡한 방법을 사용해야 하기 때문에 좀 더 어렵다.

이 복잡성 때문에 현재의 접근법은

멀티 스테이지 파이프라인이고, 이는 매우 느리고 우아하지 않다.

 

복잡성은 디텍션이 정확한 물체의 위치를 요구하기 때문이다.

첫째로, 여러개의 후보 물체 위치(="proposal")가 연산되어야 한다.

둘째로, 이 후보자(="proposal")들은 대략적인 위치만을 제공하기 때문에 정확한 위치를 알기 위해서는 정제를 해야한다.

따라서 이 문제에 대한 해결책은 속도, 정확도, 그리고 간단함이 포함되어야 한다.

 

이 논문에서는 object proposal들을 분류하고, 그들의 위치를 정제하는 과정을 싱글 스테이지로 만들 것이다.

 

 

R-CNN의 경우 region proposal을 selective search로 수행한 뒤 약 2,000개에 달하는 후보 이미지 각각에 대해서 convolution 연산을 수행하게 됩니다. 이 경우 한 이미지에서 feature을 반복해서 추출하기 때문에 비효율적이고 느리다는 단점이 있습니다.

Fast R-CNN에서는 후보 영역의 classification과 Bounding Box regression을 위한 feature을 한 번에 추출하여 사용합니다.

R-CNN과의 차이는 이미지를 Sliding Window 방식으로 잘라내는 것이 아니라 해당 부분을 CNN을 거친 Feature Map에 투영해, Feature Map을 잘라낸다는 것입니다.

이렇게 되면 이미지를 잘라 개별로 CNN을 연산하던 R-CNN과는 달리 한 번의 CNN을 거쳐 그 결과물을 재활용할 수 있으므로 연산수를 줄일 수 있습니다.

이때 잘라낸 feature map의 영역은 여러 가지 모양과 크기를 가지므로, 해당 영역이 어떤 class에 속하는지 분류하기 위해 사용하는 fully-connected layer에 배치(batch) 입력값을 사용하려면 영역의 모양과 크기를 맞추어 주어야 하는 문제가 생깁니다.

논문에서는 RoI(Region of Interest) pooling이라는 방법을 제안해서 후보 영역에 해당하는 특성을 원하는 크기가 되도록 pooling하여 사용합니다.

(출처 : https://velog.io/@cha-suyeon/%EB%94%A5%EB%9F%AC%EB%8B%9D-Object-Detection-Architecture-1-stage-detector%EC%99%80-2-stage-detector)

 

# R-CNN 아키텍쳐

Figure 1. R-CNN architecture.

 

# Fast R-CNN 아키텍쳐

Figure 1. Fast R-CNN architecture.

 

 

 

 

 

 

 

 

반응형

+ Recent posts