반응형

(개인적으로 학습의 목적으로 정리한 글로 틀린 내용이 있을 수 있습니다)

Attention이 생긴이유

1) 연속된 정보(Sequence data)들관의 상관관계를 처리하기 위해 RNN(Recurrent Neural Network)이 처음으로 고안되었다.

2) 하지만 RNN은 vanishing gradient의 문제점 때문에 데이터가 길어지면 길어질수록 결과가 부정확해졌고, LSTM(Long Short Term Memory)는 이를 보완하기 위해 구조를 개선하여 나왔다.

3) Seq2Seq 모델은 내부적으로 encoder와 decoder라는 2개의 LSTM/RNN 모델 계층들을 사용하여 sequence를 입력값으로 받고 결과값도 sequence로 반환하여준다.

4) 하지만 Seq2Seq 모델또한 Vanishing Gradient문제가 남아있고, 하나의 고정된 벡터에 모든 정보를 압축하려고 하니까 정보 손실이 발생한다. 이를 보완하기 위해 Attention Mechanism이 사용되고 있다.

 

Seq2Seq 모델을 간단하게 짚고 넘어가기!

Seq2Seq 모델은 encoder과 decoder로 이루어지는데, encoder와 decoder는 하나 혹은 여러개의 RNN/LSTM의 계층을 가집니다. Encoder는 입력값을 압축해서 context vector로 변환합니다. 그리고 decoder는 이 context vector를 기반으로 각각의 timestamp마다 결과값을 추론하며, 얻어진 결과값을 다음 timestamp의 입력값으로 사용합니다. decoder는 이 작업을 <sos>부터 시작하여 <eos>까지 반복합니다. 추론의 결과값이 <eos>가 나오면 작업을 끝냅니다.

 

Attention의 기본적인 아이디어

Attention의 기본 아이디어는 decoder에서 출력단어를 예측하는 매 timestamp마다 encoder에서 전체 입력문장을 다시 참고하는 것이다. 이 때 모든 입력값들을 동일한 비중으로 참고하는 것이아니라, decoder에서 현재 timestamp를 넘겨주면 encoder에서 softmax함수를 사용하여 decoder의 추론에 도움이 되는 정도를 수치화하여 전달하여 주고 이 정보를 decoder는 사용하게 됩니다. 결과적으로 deocder는 출력단어를 더 정확하게 예측할 확률이 높아집니다.

 

Hard vs Soft Attention

Attention은 크게 Hard와 Soft로 나누어지는데 가장 큰 차이점은 hidden state의 weight를 계산하는 function이 differentiable한가이다. Encoder의 hidden state를 differentiate하여 cost를 구하고 이를 사용하여 모델을 학습시키는 Soft Attention과 달리 Hard Attention은 randomness가 포함되어있기때문에 differentiable하지 않다. 따라서 주로 Reinforced Learning을 사용하여 모델을 학습시킨다.

 

Global vs Local Attention

만약 decoder에서 추론을 할때 모든 input을 보고 결정한다면 Global Attention이다.

반대로 deocder에서 추론을 할때 input의 특정 부분만을 보고 결정한다면 Local Attention이다

 

Self Attention

Self Attention은 decoder의 state를 신경쓰지않고 input들 사이에서 각 timestamp때 어떤 input들에 더 높은 비중을 줘야될지를 결정한다. decoder없이 오로지 input들만으로 attention score를 계산하기때문에 구현이 쉽고 계산이 빠르며 decoder의 이전 state가 필요하지 않기때문에 한번에 다 계산해버릴 수 있다.

 

 

 

 

 

 

 

Reference:

Attention: https://wikidocs.net/22893

Seq2Seq: https://wikidocs.net/24996

Soft vs Hard Attention: https://stackoverflow.com/questions/35549588/soft-attention-vs-hard-attention

Self Attention: https://towardsdatascience.com/illustrated-self-attention-2d627e33b20a

 

 

반응형
블로그 이미지

개발자_무형

,
반응형

What is Entropy:

Entropy is the measure of impurity, disorder and uncertainty

In machine Learning: Average number of yes/no questions we need to guess the target class

 

How does entropy play?

Entropy controls how a Decision Tree decides to split the data. It actually effects how a decision tree draws its boundaries.

 

What is Information Gain:

Information Gain(IG) measures how much "information" a feature gives us about the class

 

Decision Tree Algorithm tries to split by attributes with highest Information Gain

 

https://www.youtube.com/watch?v=9r7FIXEAGvs

참고: https://medium.com/coinmonks/what-is-entropy-and-why-information-gain-is-matter-4e85d46d2f01

반응형
블로그 이미지

개발자_무형

,
반응형

출처: https://ratsgo.github.io/machine%20learning/2017/03/26/tree/

Decision Tree Learning은 데이터들의 모음으로부터 패턴을 추출하여 같은 규칙들 안에 들어가는 데이터들끼리 묶어 Decision Tree를 만들고, 이를 활용하여 새로운 데이터가 들어왔을때 데이터가 어떤 집합에 속하게 되는지를 판별함으로써 target을 예측하는 방법입니다.

 

위에 도표를 예시로 들자면,  가장 아래의 Leaf node를 먼저 살펴보겠습니다. Humidity <= 70의 노드에는 Play 2 Don't Play 0로 되어있는데, 이는 sunny한 날에 Humidity가 70이하인 경우에는 2번의 경기가 열렸는데 모두 Play를 했다는 뜻입니다. 이를 확장한다면 위 도표의 Decision Tree는 총 10개의 경기를 Decision Tree로 분류한 것이며 1차적으로 (sunny, overcast, rain)으로 분류를 하고, sunny는 (humidity <= 70, humidity > 70)으로, rain은 (Windy TRUE, Windy False)로 분류하였습니다. 이렇게 Decision Tree를 원래가지고 있는 dataset(10개)로 생성해놓으면 새로운 경기 데이터를 예측할 때, sunny, overcast, rain 중 어디에 속하는지를 판단하고, 그 뒤에 Humidity 혹은 Windy로 판별을 한다면 새로운 경기가 Play할지 Don't Play할지를 예측할 수 있게 되는 것입니다.

 

정리하자면, Decision Tree Learning은 기존의 dataset을 가지고, 분류가능한 특징을 가지고 classification tree를 생성하여 Decision Tree를 만들고, 이 tree를 사용하여 예측하는 것을 뜻합니다.

 

참고1 : https://en.wikipedia.org/wiki/Decision_tree_learning

참고2 : https://ratsgo.github.io/machine%20learning/2017/03/26/tree/

 

 

반응형
블로그 이미지

개발자_무형

,
반응형

Object Detection이란, 여러 개의 사물이 포함되어 있는 이미지 안에서 각각의 물체의 종류를 판별하는 Image Classification과, 각각의 사물의 범위를 예측하는 Object Localization이 합쳐진 작업입니다.

 

Deep learning 이전의 기법들:

Sliding Window: 

여러가지 사이즈의 frame들을 움직이며 각각의 위치의 score를 계산하는 방법입니다. 계산의 횟수가 많아 속도 측면에서 비효율적입니다.

 

Selective Search:

영상의 계층적인 구조를 활용하여 탐색하고 그룹화하는 과정을 반복합니다.

 

Deep learning을 사용한 Object Detection

R-CNN:

Object Detection에 CNN을 적용한 첫 논문이며 selective search와 CNN을 결합한 방법론입니다. input image를 Selective Search를 사용하여 여러개의 영역으로 나누고, 각각의 영역들에 CNN을 적용하여 Classification을 수행하는 방법입니다.

 

1-Stage Object Detector(Fast R-CNN, Faster R-CNN):

Object Localization과 Image Classification이 동시에 진행되는 방법론. 속도가 빠르지만 정확도가 낮다.

 

2-Stage Object Detector(SSD, YOLO):

Object Localization과 Image Classification을 순차적으로 진행하는 방법론. 속도가 느리지만 정확도가 높다.

 

 

참고: https://hoya012.github.io/blog/Tutorials-of-Object-Detection-Using-Deep-Learning-what-is-object-detection/

 

 

반응형
블로그 이미지

개발자_무형

,
반응형

Apache Beam

Apache Beam은 data processing pipeline을 정의할 수 있는 오픈소스 프로그래밍 모델이다. Apache Beam은 배치 프로세싱과 스트리밍 프로세싱을 모두 지원한다. Beam에서 pipeline을 정의한 후, Beam이 지원하는 Runner들(Spark, Apex, Flink, Google Dataflow) 중 하나를 사용하여 데이터를 처리하는 방식으로 각각의 Runner들을 사용하는 방법을 몰라도 Beam만을 사용해서 데이터를 처리할 수 있다.

 

Apache Beam은 Dataflow model paper를 따라 개발되었다. 여기서 Dataflow Model이란, 제한이없고 정렬되지않은 데이터셋들을 처리하기 위한 데이터의 관리 및 처리 프레임워크이다. 최근에는 끝이 없는 데이터들이 실시간으로 쏟아져들어오기때문에 이를 효율적으로 처리할 방법이 필요해졌다. 많은 어플리케이션들이 순서대로 들어온 정보를 처리후에는 순서가 뒤엉킨채로 내보낸다. 이를 앞에서 소개한 Dataflow model paper는 해결하기 위한 방법을 제시하였다.

 

Apache Airflow ( Google Cloud Composer )

머신러닝의 경우 데이터 전처리 > 학습 > 배포 > 예측의 단계를 통해 진행된다. 이 경우, 이전의 output이 다음의 input이 되는데, 이를 효율적으로 관리하기 위한 툴이 Apache Airflow이다. Apache Airflow는 파이썬 기반으로 만들어졌기때문에 데이터분석을 하는 분들도 쉽게 코드를 사용할 수 있다.

 

간단한 작업의 경우 cron을 사용하여 수행할 수 있지만, 디버깅이 어렵고 만약 에러가 발생했을때 재실행시킨다던지 하는 작업이 힘든데, apache airflow는 그런 작업들을 쉽게 UI를 사용하여 처리할 수 있게 해준다.

 

Airflow는 스케쥴링, 매니징 역할을 할뿐 실제로 데이터를 처리하지는 못한다.

 

          Cons:

            - Additional DB/Redis/Rabbitmq for Celery

            - Not dependent on data. just task dependency

 

 

Apache Atlas

Apache Atlas는 open metadata management와 governance 기능을 제공하여 사용자가 data assets들을 분류하고 카탈로그를 만들수있게 도와준다. 주로 Atlas는 Hadoop과 함께 사용되며 메타데이터를 효과적으로 교환할 수 있도록 도와준다. data가 순차적으로 처리될때도 classification이 유지된다. Atlas를 사용하면 업계 표준 요구사항을 유지하는 데 큰 도움이된다.

 

Classify된 metadat를 검색하기 위해 Solr를 사용한다.

 

Apache Beam vs Apache Airflow

두 프레임워크는 모두 작업이 순차적으로 진행하도록 보장해준다. 하지만 세부적으로 보면 큰 차이점이 있다.

 

- Airflowtask management system으로 Directed Acyclic Graph(DAG)의 노드들이 순차적으로 실행되도록한다. 만약 A > B > C 로 이어진 DAG가 있다면, Airflow는 A가 작업을 마친 후에 B를 실행시키고, B의 작업이 모두 끝난 뒤에 C를 실행시킨다. 하지만 Beamdataflow engine으로써 A, B, C 노드를 모두 동시에 실행시키고 A의 결과물이 B로, B의 결과물이 C로 들어가도록 해준다.

 

Airflow는 각각의 노드(task)들이 어떤작업을 하는지 전혀 신경을 쓰지않는다. Airflow는 단지 이 작업이 끝났는지, 혹은 실패했는지만을 본다. 따라서 만약 다음 노드로 현재 노드의 작업물을 전달해주어야한다면, 프로그래머가 직접 local file system에 저장하던지, 외부 서비스를 사용하던지해서 저장 및 로드를 처리해주어야 한다. 하지만, Beam의 각각의 task는 엔진에서 지원하는 프로그래밍 언어를 사용하여 Beam process안에서 수행할 작업을 정의해주어야한다. Beam process외부에서 데이터를 처리하는 것은 매우 어렵거나 불가능하다(Beam을 사용하는 이유에 맞지않다). Beam은 데이터를 처리하는 엔진이므로 데이터를 어떻게 처리할지만 정의하고나면, 각각의 step(task)들 간의 데이터 전달은 신경써주지않아도 framwork가 전부 처리해준다.

 

- Airflow는 그 자체로서 framwork이지만 Beam은 abstraction layer이다. Beam의 pipeline은 지원하는 runner들에게서 수행된다. Beam의 목표자체가 Beam만 배워서 여러가지의 backend들에서 실행할 수 있게하는 것이다.

 

- 가장 큰 차이점 중 하나는 Airflow는 하나의 단계가 끝난 후 다음 단계를 수행하는 방식이므로 data stream은 처리할 수 없다. stream은 끝나지 않기때문이다. Airflow의 공식 홈페이지에도 "Airflow는 data stream을 처리하기 위한 솔루션"이 아니다라고 명시되어있다.

(참고: https://stackoverflow.com/questions/50249759/apache-airflow-or-apache-beam-for-data-processing-and-job-scheduling)

 

 

 

 

 

 

반응형
블로그 이미지

개발자_무형

,