사용자 도구

사이트 도구


2018_08

01일 수요일

[Research]

논문세미나 준비

목차를

 1. Introduction
 2. Content Extraction in HTML Document
 3. Measures for Evaluating Content Extraction
 4. Framework Design
    4.1. Test Packages
    4.2. Architecture
    4.3. Output Format
 5. Performance of Extraction Algorithm
 6. Related Work
 7. Conclusions and Future Work

로 잡고, 3. Measures for Evaluating Content Extraction 까지 만듬.

여기서 발표 자료의 순서를 잡는데 고민이 생김.

사실 이 논문을 읽은 목적이자 가장 중요한 부분이기도 한데,

content extraction의 evaluating에서 아무리 precision, recall을 사용한다고 해도

scoring의 metric을 뭘로 하고 있는지가 매우 중요함.

이 부분을 먼저 설명할지 나중에 설명할지 고민.

일단 논문상에 순서로는 나중에 설명하고 있어서 발표자료에도 뒤로 뺌.

이 부분은 발표자료 다 만들고 나서 다시 생각해봐야할 문제.




02일 목요일

휴가




03일 금요일

휴가




06일 월요일

[Research]

논문세미나 준비

4. Framework Design 부분 발표자료 만듬.

이 논문에서 디자인한 프레임 워크가 그림같은건 없고 전부 글로 되어있어서

직접 설명 자료만드는데 시간이 소요됐음.

테스트 데이터를 모으는 과정이나 메타데이터 정의하는 부분, 아키텍쳐에서

proxy server 사용하여 병렬처리하는 부분 등 그림으로 그리는데 살짝 복잡했음.

내일은 비교 대상으로 사용된 CE 알고리즘 논문들 타고 내려가서 설명자료 만들어야 함.




07일 화요일

[Research]

논문세미나 준비

5. Performance of Extraction Algorithm 부분 survey 함.

논문에서 제시하고있는 CE 알고리즘은 Crunch, BTE, DSC, LQF로 총 4개.

BTE나 DSC는 워낙 유명한 논문이라 어느정도 파악이 되는데 Crunch는

관련 자료가 너무 안나옴. 차라리 이 알고리즘은 주제로 논문이 제대로 하나

있으면 좋을텐데 약간 프레임워크같은 개념이라 동작 원리에 대해 명쾌하게

설명하는 문서가 없음.

그래도 레퍼런스 타고 들어가서 관련 서적 찾음 (50페이지짜리)

그 외에 BTE, DSC, LQF 관련해서 동작 과정 정리하고 발표자료 만듬.




08일 수요일

[Research]

논문세미나 준비

5. Performance of Extraction Algorithm 부분 발표자료 수정하고

6. Related Work / 7. Conclusions and Future Work 부분 마무리 함

이 분야에서 related work가 많지 않다보니까 related 라는 단어를 사용하기

민망할 정도로 비교가 명확하지 않음.

그래도 논문에서 그렇다고 하니까 발표자료는 만듬.

conclusion으로는 논문에서 제시하는 내용과 (자신들의 프레임워크가 매우 성공적이라고 함)

내 견해를 정리함.

텍스트를 중심으로 비교하기 때문에 이 프레임워크는 이미지가 주요 컨텐츠인 웹페이지를 대상으로는

올바른 비교결과를 얻지 못함.

또한 구조적인 정보에 대한 가중치가 너무 없다는 것도 문제점 중에 하나임.

내가 논문쓸때는 이런 점 잘 기억해놨다가 반영해야겠다는 생각을 함.




09일 목요일

[Research]

논문세미나 준비

논문세미나 발표자료 완성하고 연습 및 최종 정리




10일 금요일

[Study]

논문세미나가 끝나고 나니까 다시 개발할 의욕이 매우 떨어짐.

일단 이 상태로는 개발 진행 어려울것 같아서 인공지능 공부하던거 조금 진행.

지난번 진행한 내용은 텐서플로우 기본 지식과 linear regression의 개념까지 했음.

이 부분들도 시간이 오래 지나서 가물가물하다보니 다시 복습하고

다음 강의내용인 multi feature를 사용하기 위한 linear regression 부분 공부함.

텐서플로에서 feature는 거의 한 가지일 수가 없기 때문에 multi feature를 다루는 방법을 알아야 함.

이 테크닉은 linear regression 뿐만 아니라 어떤 machine learning 또는 deep learning

방법을 사용해도 마찬가지임.

multi feature를 사용하려면 matrix를 사용해야 하고 feature와 output lable의 개수에 따라

W값의 shape을 정하는 것이 매우 중요함.

강의에서 제공해주는 예제는 퀴즈와 중간고사 점수를 이용하여 기말고사 점수를 예측하는 내용인데

여러개의 feature를 사용하니까 신기하게 예측이 됨.

1기 2기때 학부 조교하면서 뽑아낸 학생들 점수로 한번 예측해봐야 겠다는 생각이 듬.

추가로 data set을 외부 파일로부터 가져오는 방법에 대한 설명도 들음.

파이썬의 numpy 모듈을 사용하는 내용이였고, 파일이 매우 커서 메모리에 올리지 못할 경우

사용하는 batch 기능까지 설명을 들음. shuple 기능도 있고 나중에 빅데이터 보유했을때

응용하면 좋겠다는 생각을 함.

오늘로 linear regression 부분은 학습 완료했고, 다음 강의 내용은 logistic regression 및

classification 부분임. 이 부분들도 학부 수업때 많이 듣긴 했었지만 구현해본 경험은 없음.

이론 지식 뿐만 아니라 텐서플로우로 구현까지 해보면 좋을것 같음.

다음주부터는 매일 조금씩이라도 꾸준히 진행해야 함.




13일 월요일

[Study]

모두를 위한 머신러닝 lecture 5. logistic regression 과 lecture 6. softmax classification

공부. 로지스틱 회귀는 binary classification 이라고도 불리며 0 또는 1 2가지의 결과로 labeling

하고 싶을때 사용되는 machine learning 기법임. 내용은 복잡할것 같지만 의외로 간단함.

linear regression과 마찬가지로 선형 방정식 y = Wx + b를 세워두고, 이 함수 H(x)를 sigmoid 함수를

이용하여 0에서 1사이의 값을 얻어낼 수 있도록 모델링하면 끝.

결과값은 0에서 1사이의 값으로 나타나게 되고 threshold 적절히 설정해 주어 결과만 분류하면

binary classifier로 사용 가능함.

softmax classification 같은 경우는 multiple labeling이 가능한 다중 classification 기법.

sotfmax 라는 확률 기반의 activate 함수를 사용하여 여러개의 label을 기준으로 분류할 수 있음.

대신 이 함수를 사용하려면 one hot incoding 방식을 사용해야함. 즉, labeling이 한개만 1이고

나머지는 0인 깨끗한 data로 정제되어 있어야 함.

텐서플로우에서는 이런 기능 제공해주는 함수들이 무지 많이 존재함.

[Research]

얼마 전에 발표했던 논문에 자극을 받아 평가 프레임워크 개발 진행하기로 함.

논문에서는 텍스트 기반의 비교방식만 사용하고 있지만 나는 면적과 dom 노드 비교 기반의 평가

프레임워크를 개발해야 함. 정답 set은 생성했고 (약간의 정제 과정이 필요하지만) 정답률을 자동으로

계산해주는 프로그램 개발해야 함.




14일 화요일

[Study]

모두를 위한 머신러닝 lecture 7. ML의 실용과 몇가지 팁 부분 공부

이번 챕터는 약간 짬뽕같은 느낌. 정리를 하자면

(1) running rate

(2) Overfitting

(3) Regularization

먼저 running rate같은 경우는 학습을 할때, 너무 러닝 rate을 너무 크게 잡으면

overshooting 발생하여 데이터값이 위로 튀어버리고, 너무 작게 잡으면 gradient descent

가 너무 느리게 돌아가므로 트레이닝이 끝났을때 optimal value를 찾아가지 못함.

따라서 제대로 cost 값이 측정이 안된다면 running rate 의심해봐야 함.

다음으로 overfitting 부분은 트레이닝을 많이 시킨다고 다 좋을것 같지만,

오히려 너무 많은 트레이닝은 트레이닝 데이터에 의존되므로 좋지 못함.

overfitting을 해결하는 방법으로는 3가지가 있음.

(1) training data의 양을 늘림

(2) feature의 개수를 줄임

(3) regularization

regularization은 feature 끼리의 분포가 너무 크거나 작을때 cost function을 그려보면

찌그러져버리는 현상이 생기는데 이때 사용하는 방법.

모든 feature들의 range를 같은 범주로 정규화 시켜서 평평한 모양의 cost function을 만들어줌.

lecture는 이정도 진행했고, lab으로는 running rate 오류나는 예제 찍어보고,

텐서플로에서 제공하는 mnist 데이터 이용하여 image classification 실습해봄.




15일 수요일

공휴일




16일 목요일

[Study]

모두를 위한 머신러닝 lecture 8. 딥러닝의 기본 개념 lecture 9. MNL과 Backpropagation

본격적인 Deep Learning 부분에 접어 듬. 학부 및 석사 수업시간에 배울때보다 훨씬 깊이

들어가서 이해하는데 시간이 걸렸지만 원론적으로 따라가다보니 이런 내용이었구나 신기함을

느낌. 요약하자면, 기존의 머신러닝 및 뉴런을 사용한 러닝 기법들은 단층 Layer를 사용했었는데,

이 방법은 선형 모델을 따르기때문에 XOR같은 비선형 문제는 해결하지 못함.

그래서 해결책으로 제시된 방법이 다층 Layer를 설계하는 것.

근데 이 역시도 문제가 있는게, 기존의 단층 Layer 모델에서는 신경망의 가중치를 학습시킬때

cost function을 minimal 하게 optimization 하는 방향으로 일종의 learning 을 진행해

나갔었는데 다층 신경망이 되니, 각각의 perceptron에서의 미분 값 (즉, 각각의 perceptron들의

가중치가 최종 output에 얼마나 영향을 끼치는지의 정도)를 구하는데에는 막대한 계산량이 필요함.

이유는 각 layer의 노드들끼리 input과 output이 연결되있는 구조 탓에 미분 값을 구하려면

chain rull에 의해 이전 cost function의 결과 값을 알아야 하기 때문.

그러나 이 한계를 가능하게 한 이론이 등장했는데, (사실 가능하게 했다기 보다는 약간의 규칙을

발견했고, 알고보니 생각보다 계산량이 적었다고 표현해야 올바름) 그것이 그 유명한

Backpropagation 알고리즘. 이름 그대로 각 Layer의 가중치 값들을 역전파 시키면서 갱신해나가는

방법. 이 방법은 뒤로 돌아올때 이미 계산해 놓은 미분값을 다음 뉴런에서 바로 이용할 수 있으므로

chain rull의 한계를 교묘하게 넘어갈 수 있음.

아무튼 이런 이론적인 바탕아래, Deep Learning이 가능해졌고, 비선형 문제들도 학습할 수 있는

신경망이 구현 가능해짐.

내일부터는 DNN 관련 코딩 실습해보고 나머지 진도 진행해야 함.




17일 금요일

[Study]

모두를 위한 머신러닝 lecture 9. Backpropagation 실습 lecture 10. DNN Breakthrough

어제 이론수업듣고 중간에 멈춘 9장 실습 진행. 이 전에는 1 Layer의 뉴런으로 학습하여 문제를

해결했었고, activation function은 시그모이드로, cost function은 엔트로피로 돌렸었는데

이 모델이 성능이 좋을것 같지만, XOR 문제를 (비선형적인 문제) 학습하여 돌려보면 accuracy가

엉망이 됌. 이유는 하나의 뉴런으로는 선형문제를 해결할 수가 없기때문. (물론 요즘에는 커널

알고리즘이라고 해서 차원을 늘려 위아래로 쪼개는 방법도 나왔다고 하지만 단순히 뉴런을 이용한

모델에서는 해결할 방법이 없다는 것이 명백히 증명되었음)

이 문제를 해결하기 위해 뉴런을 하나 더 늘리고 (Layer를 늘리고) W의 input개수와 output개수를

잘 맞춰서 돌려보니 높은 accuracy 나옴. 그리고 tensorflow 노드들의 값이 변하는 과정을

찍어보는 방법으로 tensorbord 사용하는 방법도 실습해 봄.

다음으로는 10장 DNN의 Breakthrough에 대해 강의를 들었는데, 이 내용을 이해하려면

DNN의 연구적인 흐름을 알아야 함.

먼저 MIT AI Lab의 창립자였던 Minskey 그리고 Papert가 저서를 통해 현재의 퍼셉트론으로는

XOR 가 절대 불가능하다라는 것을 수학적으로 증명함. 그뿐아니라 하나의 퍼셉트론이 아닌 MLP

(Multilayer Perceptron)을 통해서 XOR는 해결될 수 있지만, 각각의 weight와 bias를 학습시킬

방법이 없다라는 결론에 이르게 됨. 즉 이건 절대 해결할 수 없다고 저술하였고, 많은 사람들이

이 책을 읽고 공감하게 됨. 그렇게 딥러닝의 빙하기가 약 10년간 이어지다가 딥러닝의 대부

Geoffrey Hinton이 이 문제를 해결하는 논문을 발표함. 이게 그 유명한 Backpropagation

알고리즘. activation function을 sigmiod로 사용하고, 중간의 W과 b의 값들이 결과에 미치는

영향력을 미분으로 계산해냄으로써 모든 뉴런들의 W와 b를 계산해냄. 중요한 부분은 이 과정에서

앞의 계산 결과를 뒤의 연산에서도 사용하므로 계산량의 부담이 절감된다는 것.

이후로 큰 선풍을 얻고 많은 연구가 진행되다가 두번째 빙하기가 찾아옴.

DNN의 길이가 길어지면 Backpropagation연산을 할때 input layer와 가까운 부분의 뉴런들이

학습이 되지 않는 현상이 발생. 이유는 sigmiod function이 값이 작아질 경우 0에 가까운 값을

곱해버리게 되니까 앞에서 밀려오던 weight 정보들이 손상되어버리는 것.

이를 vanishing gradient 문제라 부름.

그로부터 약 10년 뒤 이 문제를 해결하는 방법으로 Geoffrey Hinton이 유명한 breakthrou 논문을

발표. 지금까지의 DNN이 제대로 학습되지 않았던 이유를 4가지 꼽으면서 해결책을 제시

대표적인 예로는 w값들의 초기화 문제와 activation function 사용의 문제를 듬.

10장에서는 이러한 연구 과정을 정리하면서 문제가 됐던 코드를 실행해 봄.

여기서 tensorflow 에 큰 매력을 느낀게, 최신 논문들에서 제시한 다양한 알고리즘 및

딥러닝 모델들이 그대로 구현되어있고, 원하는 모듈만 가져다 사용하면 된다는 것.

DNN 모델 만들어놓고 mnist 데이터로 성능이 향상되는 과정 보면서 매우 흥미로웠음.

다음주 부터는 딥러닝의 꽃인 CNN과 RNN에 대해 본격적으로 시작해야 함.

연구가 많이 밀리고있지만, 내 성격상 공부에 탄력을 받았을때 끝장을 보는게 좋겠다는

생각임. 빨리 끝내고 연구와 함께 개발 진행하면 좋을것 같음.




20일 월요일

[Research]

content extraction의 평가 프레임워크를 만들기 위해서는 수집해놓은 mht 파일의 feature를

parsing해오는 작업이 필요함. 그래서 구글링을 해보니, 로컬 html 파일을 dom tree로 바꿔주는

parser는 많이 존재해도 mht를 다이렉트로 파싱해주는 라이브러리는 거의 찾을 수 없음.

결국 해결책은 일단 mht 파일을 html 파일로 converting을 하고 DOM tree로 파싱을 해야함.

mht 파일 컨버팅 라이브러리 찾아봐야함.

만약 feature를 잘 찾아냈다고 해도 비교하는 기준에 따라 성능 평가가 다르게 진행됨.

일단 가장 먼저 DOM Tree끼리의 유사도를 비교하는 방법을 구현해보기 위해

DOM tree similarity에 대해 찾아보니 이것 역시 잘 나오지 않음.

그나마 찾은것은 예전에 눈문세미나 하면서 알게되었던 tree edit distance.

LCS를 Tree에 응용한 기법인데 두개의 DOM element간에 같다 다르다의 정보를 넘어

어느정도 같은지를 확률값으로 알 수 있기 때문에 유사도를 측정하기에 좋은 알고리즘임.

라이브러리가 거의 없는것 같으니 논문 보면서 이 알고리즘 구현해야 할것 같음.

2018_08.txt · 마지막으로 수정됨: 2021/04/13 06:54 (바깥 편집)