Machine learning: the problem setting

일반적으로, 학습 문제는 n개의 샘플 데이터를 고려하여, 알려지지 않은 데이터의 우선순위를 예측하려는 것이다.

각 샘플이 single number에서 나아가, 다차원 entry라면, 몇 가지 속성(attribute) 혹은 특징(feature)을 가진다.

 

학습 문제는 다음과 같이 분류된다.

  • 지도 학습(supervised learning) : 데이터에 예측하려는 특징(feature)이 포함되어 있다. 주로 분류(classfication), 회귀(regression)문제가 이에 해당한다.
     -분류(classfication) : CIFAR-10 이미지 분류, 자연어 처리에서의 문장의 속성 분류,  스팸 메일 분류 등의 문제가 있다. 정답이 라벨링된 데이터로부터 라벨링되지 않은 데이터의 class를 예측하는 것이 목표이다.
     -회귀(regression) : 원하는 출력이 하나 이상의 연속 변수로 구성된 경우이다. 즉, 연속된 값을 예측하는 문제로 공부 시간과 이전 성적을 통한 현재 전공 시험 점수 예측을 예로 들 수 있겠다.
  • 비지도 학습(unsupervised learning) : unlabelled data를 통하여 예측을 해야하는 문제이다. 정답이 없는 데이터에서 잠재된 의미를 찾아야하므로 훨씬 어려운 케이스이다. 주로 클러스터링, 밀도추정, 차원축소 문제와 관련되어 있다. 
     -클러스터링 : 한글로 해석하면 군집화 정도로 이야기할 수 있다. 분류(Classfication)과 비슷한 개념인데, 클러스터 분석이란 주어진 데이터들의 특성을 고려해 데이터 집단을 정의하고 데이터 집단의 대표할 수 있는 대표점을 찾는 것으로 데이터 마이닝의 한 방법이다. 클러스터란 비슷한 특성                         을 가진 데이터들의 집단이다. 반대로 데이터의 특성이 다르면 다른 클러스터에 속해야 한다
     -밀도추정 : 관측된 데이터들의 분포로부터 주어진 변수의 확률 분포 특성을 추정하는 것
     -차원축소 : 고차원 데이터의 경우 많은 feature를 가지고 있어 데이터를 잘 나타내는 feature를 추출해내야한다. 이를 CNN에서의 pooling도 차원 축소의 한가지 예로 들 수 있다.

앞으로 진행할 프로젝트를 위한 기반지식을 쌓도록 해야겠다.

'삼성전자 인턴' 카테고리의 다른 글

Scikit-learn perceptron study  (0) 2019.09.30

Intro.

Scikit-learn의 사용법에 익숙해지기 위하여 iris 품종 분류 Perceptron 실습을 통하여 공부한 내용입니다.

Source Code.

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import Perceptron
from sklearn.metrics import accuracy_score
import numpy as np
import matplotlib.pyplot as plt

if __name__ == '__main__':
iris = datasets.load_iris() #iris에 대한 데이터를 불러온다.
print(iris)
X = iris.data # 0 : 꽃받침 길이 / 1 : 꽃받침 너비 / 2 : 꽃잎 길이 / 3 : 꽃잎 너비
y = iris.target #출력해보면 0,1,2로만 출력이 되는데 iris_setosa, iris-versicolor, iris_verginica에 해당하는 값으로 이미 숫자로 바꾸어 져있음.
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) #random_state : random_seed값을 줌으로써 train/test split이 고정됨, test_size 값을 통해 학습데이터와 테스트 데이터 비율을 나눔


sc = StandardScaler() #스케일링 : 전체 자료의 분포를 평균 0 표준편차 1이 되도록 변환
sc.fit(X_train) #X_train의 평균과 표준편차를 구한다.
X_train_std = sc.transform(X_train) #학습용 데이터를 입력으로 하여 transform 실행시 학습용 데이터를 표준화한다.
X_test_std = sc.transform(X_test) #마찬가지로 테스트 데이터 표준화

ml = Perceptron(n_iter_no_change=40, eta0=0.1, random_state=0)#eta0 : learning rate, n_iter : epochs over data
ml.fit(X_train_std, y_train)
y_pred = ml.predict(X_test_std)
print("총 테스트 개수:%d, 오류개수:%d" %(len(y_test), (y_test != y_pred).sum()))
print("정확도: %.2f" %accuracy_score(y_test, y_pred)) #accuracy_score() : y_test y_pred를 비교하여 정확도를 계산해줌
#iris의 모든 데이터를 X로 두고 사용했을 때 93%의 정확도 (test_size = 0.3) // (test_size = 0.2 , acc = 1.00(..? overfitting?) test size 0.1, acc = 0.93)
#iris 2,3 정보만 사용했을 때 91%(test_size = 0.3)
#test_size = 0.2 일 때를 왜 1.00이 나오는지 분석해보자

Result.

 

http://blog.naver.com/PostView.nhn?blogId=samsjang&logNo=220965998073&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView 옥수별 님의 블로그 외 scikit-learn document를  참고하여 공부하였습니다.

module과 parameter 같은 경우 scikit-learn 버전이 바뀌면서 예전 자료 공부시 에러가 발생했습니다.

특히 from sklearn.model_selection import train_test_split, 부분과 Perceptron의 parameter 인n_iter_no_change 같은 경우 sklearn.model_selection으로 고치기 이전에 기존에는 sklearn.cross_validation 이었으나 그대로 작성 시 오류가 발생함을 확인하였습니다. 찾아보니 train_test_split이라는 함수가 model_selection의 하위로 들어갔다고 합니다.

또 기존 코드에서는 Perceptron 부분에서 n_iter와 같이 사용되는데, scikit-learn document를 보면 n_iter가 없는 것을 볼 수 있습니다. 본인의 버전에 맞는 document를 참고하는 것이 중요하다는 교훈도 다시 한 번 얻어갑니다 :)

 

'삼성전자 인턴' 카테고리의 다른 글

An introduction to machine learning with a scikit-learn  (0) 2019.09.30

아주 얼떨결에 6학기를 다니지 않고 인턴으로 15학점(전공6+교양9)을 인정받으면서 삼성에서 일하게 되었습니다..

 

하계/동계 인턴과의 가장 큰 차이점은 6주동안 진행되는 하계/동계 인턴과는 다르게 우선 16주라는 짧다면 짧고 길다면 긴 동안 일을 한다는 사실이고,

채용전환형은 아니라는 점이죠..ㅠㅠ

 

그래도 긴 시간동안 일하는 만큼 배우는 것도 많고 어깨너머로 들리는 말들도 많이 도움이 될 것 같습니다.

 

9.2 월요일에 처음 들어오고 21명의 학생들이 다같이 교육을 받고 기숙사 입주 인원들은 기숙사 교육이수 후 기숙사에 입주하게 되며 하루를 마무리 했습니다.

 

둘째날에는 인사팀 쪽에서 대기하고 배치된 부서의 인사쪽에서 데리러 올 때까지 기다리는 과정이 있었고,

 

사실 아직 홍보가 잘 되지 않은 제도라 그런지 부서 배치 후 다들 얼떨떨해 하시는 분위기였습니다.

 

그래도 지난 학기 학생들의 후기를 보니 다들 좋은 경험과 프로젝트를 진행하고 수료한 것 같았습니다.ㅎㅎ

 

저는 삼성전자 DS부문 기흥/화성/평택단지총괄 스마트IT팀의 여러 그룹중 설비/인프라IT그룹으로 들어갔습니다.

우선 엄청난 팀 규모에 놀랐고,, 결과적으로 생성되는 매우 작은 nm단위의 반도체를 제조하기 위해 이렇게 많은 인원들이 아주 체계적으로 일을하고 있다는 사실에 두 번 놀랐고, 엄청난 보안 관리에 세 번 놀랐습니다 ㄷㄷ.. 사스가 삼성

 

아직 1주차라 진짜진짜 엄청엄청 매우매우 맛있는 사내 식당에서 밥을 먹고 선배님들과 이야기를 하며 퇴근 후에는 기숙사 동기들과 시간을 보내느라 정신없이 흘러갔습니당ㅋㅋ

 

다음 주도 사실 추석이라 월화수만 출근이고 혼자 공부를 하거나 환경 세팅 정도만 하고 3주차쯤부터 정확히 어떤 프로젝트를 진행하게 될 지 정해질 것 같네요.

 

아침형 인간이 아니라 매일 6시에 눈뜨는게 제일 힘들었고, 한 달 정도 지나면 익숙해 지겠죠ㅠㅠ

 

별로 할 줄 아는게 없어서 걱정이긴한데,,

 

암튼 1주차 후기 끝!

 

 

 

 

*모든 내용이 들어있진 않습니다.

*인턴 과제 준비 중 제가 이해한 바에 대해서만 작성하였습니다.

 

BILSTM with deep biaffine attention to score each possible head for each dependent, applied to the sentence "Casey hugged Kim". We reverse the order of the biaffine transformation here for clarity

Intro.

이 논문의 내용을 간략하게 소개하자면..

depenency parsing에는 크게 두 종류가 있다. graph-based parsingtransition-based parsing.

이에 대한 내용은 추후 포스팅하도록 하고..(사실 연구실 1차 세미나 과제였음ㅋ)

이 논문에서는 graph-based parsing에서 구해지는 의존 관계 점수의 합이 가장 큰 트리를 구하는 데에 있어서,

arc의 점수를 구할 때 머신러닝 기법을 이용하여 진행하는 것이다.

여기에 Embedding, BILSTM, MLP, biaffine attention 기법 등이 이용된다. 

여러 가지 기법들이 등장하는데...

 

우선 석사 1학기 동안 배워야 할 내용들을 오픈 핵 갔다 와서 바로 공부하려니 정말 힘들었다.

(1차 세미나에서 공부했던

"Simple and Accurate Dependency Parsing Using Bidirectional LSTM Feature Representations"

에 대한 이해도 우선 부족했고,  기존에 CNN 모델에 대한 이해정도까지밖에 없었기에 배경지식 공부하는데 정말 많은 시간을 투자한 것 같다.)

 

 

Overall flow

우선 word -> Embedding -> output :xi -> BILSTM -> output:ri ->  MLP -> hi(arc-dep), hi(arc-head), hi(label-dep), hi(label-head)의 과정을 거친다.

 

 

Expression Description

논문의 식을 설명해 보도록 하겠다.(parameter에 대한 정보는 논문 주석에 나와있으니 생략)

우선 W가 왜 RU(1)가 되는지 U가 어디서 갑자기 나온 놈인지 정말 이해가 가지 않았다. 하지만 관점을 다르게 보니까 바로 해결.

우리는 지금 arc의 score를 머신러닝 과정을 거쳐서 학습시키고 업데이트하는 것이 목표다. 그렇기에 bi-LSTM과정을 거쳐서 나온 R(ri를 모아둔 거)에 대해서 U를 곱해주는데 이 U가 biaffine attension을 위한 학습 parameter인 것이다. 

그렇게 해서 위 si(arc)가 나오게 된 것이다.

아직 마지막 과정이 더 남았다. 

위에서 설명한 식의 R의 row를 각각 ri라고 한다.

그 ri를 MLP에 통과시켜 나온 것이 hi다.(4,5)

그 h들을 모아놓은 것이 H인 것이다.

 

그럼 이 과정을 왜 거치느냐? 

MLP를 통과시킴으로써 현재의 결정과 관련 없는 정보들을 stripping away 할 수 있기 때문이다...라고 되어있는데.

attention이라는 게 좀 더 연관된 정보에 집중하여 학습을 시키는 것이니까 이렇게 이해하면 될 것 같기도 하고.. 공부를 더 해봐야겠다.

 

지금 이해를 못한 부분이..

이 식이다.

 

----------------------------------------------------------------------------------------------------------------------------

19.7.24 update

해결했다. 아래 그림은 논문 내용 이해를 바탕으로 한 세미나 발표자료다.

 

세미나 ppt 중 일부 발췌
세미나 ppt 중 일부 발췌

세미나 발표 직전에 구현되어 있는 코드를 보면서 이해하게 되었는데

arc의 경우 arc-dep에만 1 column 한 줄을 추가하고

label의 경우 label-dep, label-head에 모두 1 column 한 줄을 추가한다는 의미를 저렇게 수식으로 표현한 것이다. (아래 논문 일부 참조)

 

 

마무리

NLP 진짜 어렵다ㅋㅋㅋ 구현에 대해서는 자세히 서술하지 않았는데 추후에 코드를 뜯어서 다시 자료를 업데이트해야 할 듯. 코드를 한 번 쭉 보고 이해하긴 했는데 디테일한 부분까지는 아직 제대로 캐치하지 못했다 ㅠㅠ

 

+ Recent posts