대략적인 구조

크리에이티브 커먼즈 라이선스
Creative Commons License

1. 코드 표절탐지 알고리즘으로 유사도 비교 -> 기존 취약코드와 가장 유사한 코드들 리스팅

2. 자연어 처리를 이용해 해당 코드의 역할 분석 (함수명, 변수명 등) -> 유저 인풋을 다룰 확률이 얼마나 되는지 예측

3. micro execution(patrice godefroid)를 이용해 해당 코드에서 취약점이 발생할 수 있는 잠재적 인풋을 계산함

4. concolic execution을 이용해 해당 코드까지 도달하면서 잠재적 인풋이 실제로 발생할 수 있는 인풋인지 알아냄

-> 취약점 발견

신고

설정

트랙백

댓글

D-74 생각정리

크리에이티브 커먼즈 라이선스
Creative Commons License

http://arxiv.org/abs/1409.3358v1

이 논문을 읽고 있는데
논문에 있는 수식은 이해가 안돼서 내일은 코드를 좀 읽어보면서 수식이랑 매치시켜봐야 할것 같다
논문의 앞쪽에서 얘기한 내용이랑 뒤에서 내린 결론이 무슨 관계가 있는지 좀 헷갈리는데
저자들이 잘못썼을리는 없고 내가 멍청한거같으니 다시한번 읽어봐야겠다

프로그램 분석을 구체적이고 직관적인 해결책만을 생각하면서
해결하기 어려운문제들이 많다는것을 느꼈는데
바이너리 디핑을 할때처럼 추상화를 도입하면 몇가지 어려운문제들은 우회가 가능할것 같다


신고

설정

트랙백

댓글

D-75 자료들 리스트

크리에이티브 커먼즈 라이선스
Creative Commons License

http://deview.kr/2013/detail.nhn?topicSeq=39

딥러닝과 기존의 알고리즘간의 차이를 설명하고 실제 적용사례를 보여주는데

아키텍쳐를 어떻게 고안할지에 대해 힌트를 몇가지 얻어 많은 도움이 됐다


http://deview.kr/2014/session?seq=26

위에 발표하신분이 2014년에 비슷한 주제로 하신 발표

내일 볼 예정


http://www.cs.toronto.edu/~hinton/

위 데뷰에서 발표하신 분이 소개해주신 조프리 힌턴의 페이지, 참고할만한 페이퍼가 많아보인다


http://www.cs.toronto.edu/~hinton/absps/guideTR.pdf

위 페이지에 있는 문서중 하나인데

짧아서 읽어볼만 할것같다 아직 안읽어봄



http://arxiv.org/abs/1409.3358v1

대부분 머신러닝 알고리즘들은 트레이닝을 위해 데이터의 벡터화, 이진화가 필요한데

지금 글을 읽는 순간엔 아직 안읽어봤지만 글 작성후 바로 읽어볼 문서이다

프로젝트 구상후부터 계속해서 고민해온 내용인데 머신러닝으로 검색했을때 찾기 힘들던 내용이 딥러닝으로 검색했더니 드디어 나왔다

프로젝트에 많은 도움이 될것같다

https://sites.google.com/site/learnrepresent/

위 논문의 저자들이 소스, 데이터셋, 학습된 representation(어떻게 번역할지 몰라서 논문에 있는대로 씀)등을 올려둔 사이트다

위 논문의 references에도 좋은 논문들이 많이 소개돼있다


http://courseshare.co.kr/user/100001818853652

이분이 만든 강의 목록에 딥러닝과 머신러닝에 대한 강의가 있는데

아주 쉬운내용이라고 말하기는 힘들지만 알고리즘이해에 도움이 많이 되고

추가로 볼만한 내용들을 소개해주셔서 이사이트도 많이 참고하게될것같다






신고

설정

트랙백

댓글

10일차 - 프로젝트 고민

크리에이티브 커먼즈 라이선스
Creative Commons License

머신러닝인액션을 코딩을 같이하면서 읽다보니 진행속도가 너무 느려서

우선 머신러닝부터 공부하고 아이디어를 구상하는게 아닌

머신러닝과 프로그램분석, 취약점검출을 결합한 연구들을 찾아보고

아이디어를 구상한뒤 다시 책을보면서 그 아이디어를 어떻게 구현하면 좋을지를 생각하는

탑다운방식의 접근으로 바꿔서 진행하는게 좋을거같다


신고

설정

트랙백

댓글

9일차 - 의사결정트리

크리에이티브 커먼즈 라이선스
Creative Commons License

의사결정트리는 하나의 임의의 데이터집합이 존재할때

그 집합의 요소들을 각 요소의 공통점에 따라 분할한 트리를 뜻한다

이때 각 분할 스테이지마다 가장 효율적으로 분할하는 방법을 알아내야 한다

효율적인 분할은 정보이득이 최대화 되도록 분할하는것을 뜻하는데

정보이득은 데이터를 분할하기 전과 후의 차이를 뜻하고

이 정보이득이 최대화 된다는것은 집합에 가장 큰 변화가 생긴다는 뜻이다

예를들어 {A,a,b,b} 라는 집합을 분할할때

대문자집합과 소문자집합으로 분할할경우 {A} 와 {a,b,b}로 분할되지만

같은문자끼리 분할한다고 하면 {A,a}, {b,b}로 기존의 집합에서의 차이가 균등하고 가장 크게 발생하는것을 알 수있다


이 추상적인 조건을 이진적인 속성으로 나타내면

isCapital 과 isFirstCharacterInAlphabet(A와 a가 같은 조건이 되는 속성이 잘 생각이 안났다)로 나타낼 수 있다

{A, a, b, b} 의 각 요소들의 속성을 tuple로 나타내면

(요소, isCapital, isFirstCharacterInAlphabet)으로 나타낼수 있고

각각은

(A, 1, 1)

(a, 0, 1)

(b, 0, 0)

(b, 0, 0)

으로 나타낼 수 있다

이때 이 집합에서 분할하기에 가장 좋은 속성(분할했을때 가장 정보이득이 높은 속성)을 측정해야

분할하기전에 어떤속성으로 분할하는게 가장 효율적인지를 알 수 있는데

이때 사용하는것이 섀넌 엔트로피라고 한다

엔트로피는 주로 열역학에서 사용되는 용어지만 정보이론에서의 엔트로피의 형태가

열역학에서의 엔트로피와 비슷한 형태를 지닌다고 해서 엔트로피라고 이름이 붙었다고 돼있다(http://ko.wikipedia.org/wiki/%EC%A0%95%EB%B3%B4_%EC%97%94%ED%8A%B8%EB%A1%9C%ED%94%BC)


엔트로피를 계산하는 방법에 대해선 위의 위키 링크를 참조하면 되는데 수식의 의미는 아직 이해를 못했다


분할시엔 각 요소별로 분할해서 엔트로피를 검사한다음 이를 전체 데이터셋의 엔트로피에서 빼면 그게 정보이득이다

즉 분할했을때 분할된 하위트리들의 엔트로피가 가장 낮도록 분할하는것이 가장 정보이득이 큰 분할법이다

위에서 집합이 어떨때 가장 효율적으로 분할될지 말로만 얘기했는데 코드로 작성해보면 아래와같다


>>> data = [[1, 1, "A"], [0, 1, "a"], [0, 0, "b"], [0, 0, "b"]]

>>> print "Best feature to split is: %s"%(["isCapital", "isFirstCharacterInAlphabet"][chooseBestFeatureToSplit(data)])

[*] baseEntropy: 1.5

Entropy when using attr[isCapital]: 0.688721875541

infoGain: 0.811278124459

Entropy when using attr[isFirstCharacterInAlphabet]: 0.5

infoGain: 1.0

Best feature to split is: isFirstCharacterInAlphabet

>>>


다시 짚고 넘어가자면 데이터의 이진화를 통해 가장 효율적으로 데이터를 분류하는 방법을 사용하는 이유는 새로운 정보에 대한 분류를 결정하는 의사결정 트리를 효율적이고 합리적으로 만들기 위해서다


위 내용들이 의사결정트리를 구성하는데 가장 기본이 되는 내용들이고

내일은 베이지안 의사결정이론을 공부할 차례다

신고

설정

트랙백

댓글

8일차 - 대회

크리에이티브 커먼즈 라이선스
Creative Commons License

코게 주니어 본선하고왔다

마지막 코게주니어라 좋은결과를 기대했는데 아쉬운 결과가 나왔다

너무 좁은시각을 갖고 시스템해킹만 공부했던게 문제였던것같다

이제 다른분야도 해봐야지

신고

설정

트랙백

댓글

7일차 - 휴식 3일차

크리에이티브 커먼즈 라이선스
Creative Commons License

4일 공부 4일휴식은 아주 훌륭한 패턴인거같다

내일 대회가있는데 지금까지 대회했을때중 공부 많이 하고 했던 대회가 좋았던적이 없어서 쉰김에 이어서 계속 쉬고있다

올해가 주니어대회 마지막참가인데 좋은성적 나왔으면 좋겠다

근데 대회가 4시부터 10시까지면 집오면 거의 12신데 피곤하겠다

오늘은 영화 마저봐야지

신고

설정

트랙백

댓글

6일차 - 휴식 2일차

크리에이티브 커먼즈 라이선스
Creative Commons License

오늘은 오랜만에 친구도 만나고 프로젝트나 대회에 대해서 아무생각도 안하면서 쉬었다

나는 주관적이고 소신있는 삶을 지향하는데 그 소신중에 하나가

공부나 연구할때 스트레스를 받으면 그건 방향이 잘못됐거나 내가 그 이상 효율적인 진행이 힘든 순간이라고 생각한다

그래서 스트레스를 받기 시작하면 바로 던지고 쉰다

내자신이 마음에 드는 성격중에 하나다


친구만나고와서 좀 잤으니 이제 영화보고 다시 써야지

신고

설정

트랙백

댓글

4일차 - 머신러닝 공부 1일차, 아이디어 노트

크리에이티브 커먼즈 라이선스
Creative Commons License

오늘은 좀 쉬려고 공부를 많이 안했다

머신러닝은 machine learning in action이란 책으로 공부하고 있는데

0일차에서 이 책에 대한 설명을 했으니 건너뛰고

오늘은 k-Nearest Neighbour (k-최근접 이웃)알고리즘을 공부했다

kNN은 많은 수의 학습데이터를 바탕으로 학습을 하고

새로운 데이터에 대해 기존의 데이터중 최근접한 k개의 요소중 가장 많이 나타나는 분류를

새로운 데이터에 대한 분류로 지정한다

학습 알고리즘에 대해 오류율을 검사하는 방법도 책에서 소개했는데

검사법은 이 방법외에도 많은 종류의 검사법이있다

내가 갖고 있는 제대로 된 분류집합의 90%만 학습을 시키고

학습된 데이터로 나머지 10%에 대한 분류를 진행해서 내가 알고있는 분류와

학습에 의해 분류된것이 일치하는지를 확인해 오류율을 확인한다



[궁금증노트]

1. 프로그램의 특성을 나타내는것은 어떤것들이 있을까

2. 프로그램을 실행하는것과 실행하지 않고 분석(동적분석과 정적분석)에는 어떤 장단점의 차이가 있을까


[아이디어]

1. control flow graph의 패턴으로 프로그램의 종류를 판별할 수 있을까?

가정: 비슷한 동작을 하는 프로그램은 비슷한 함수호출, 비슷한 알고리즘등으로 프로그램 전체의 구조가 비슷해지고 프로그램의 구조를 나타내는것중 하나인 control flow graph도 비슷해진다

검증:

step 1 : 프로그램에서 flow graph 추출하는 프로그램 작성

step 2 : 문서작성 프로그램들 5종류, 동영상 재생 프로그램들 5종류, 이미지 뷰어 프로그램들 5종류, 압축 프로그램들 5종류에 대한 control flow graph 생성

step 3 : 각 control flow graph를 패턴화시키거나 수치화

step 4 : 머신러닝 알고리즘중 적합한 알고리즘 선별

step 5 : 각 그래프들과 범주 학습

step 6 : 범주에 해당하는 프로그램 한 종류씩의 control flow graph를 생성하고 어떤 범주에 속하는지 알아서 선정하게 함

step 7 : 오류율 확인 및 다른 알고리즘으로는 가능할지 조사하고 최대 4개 알고리즘까지 실험



신고

설정

트랙백

댓글

3일차 - 지능에 관한 정리

크리에이티브 커먼즈 라이선스
Creative Commons License

제목에 쓴것처럼 지능에 관한 정리를 내 나름대로 주관적으로 해석해 도출한것들이기 때문에 신경생물학 전공도 아니고 컴퓨터공학 전공도 아니라서 많은 오류가 있을 수 있지만

우선은 내가 이해한 내용을 바탕으로 정리하고 앞으로 프로젝트를 진행하면서 필요한부분과 필요하지 않은 부분들, 명백히 잘못된 부분과 명백히 맞는 부분들을 재 정리할 생각이다

일기는 현재를 기록해 미래에 과거를 떠올리게 하는데 도움을 주는게 목표라고 나는 생각하기 때문에 현재 생각한것이 잘못된것이더라도 기록하는것이 맞다고 생각해 신경생물학적, 혹은 컴퓨터공학적으로 전혀 맞지 않는 내용이라도 맞는것처럼 쓸수 있으니 이에 대한 판단은 읽는사람의 책임으로 돌리겠다

나는 이 글을 학문의 정리와 발전을 위해 쓰는것이 아니라 매일매일의 사고의 발전과 아이디어들을 잊지않고 기록해두기 위해 적는것이기 때문에 잘못된 부분이 있어도 다른 글로 그에 대한 생각을 정리해서 올릴순 있어도 글을 고쳐 바로잡을 생각은 없다(글에 잘못된 내용이 있어도 까지 말아달라는 찌질한 부탁을 최대한 있어보이게 써봤다)


오늘자로 생각하는 뇌, 생각하는 기계 독서는 끝났다

정독으로 모든 책의 내용을 이해하고 책에서 언급됐던 과거 연구내용들까지 공부할수 있었으면 좋았겠지만

이 연구 프로젝트는 기한을 정해두고 하는것이기 때문에 시간계획이 엄수돼야 해서

내가 생각하는 핵심들에 집중하고 이를 머신러닝과 프로그램분석에 연관지어 생각하면서 읽었다


책에서는 지능을 기억-예측모델로 재정의한다

감각기관에서 받아들이는 감각 자극들에 의해 말초신경계와 중추신경계가 자극되어 생성된 전기자극에 의해 신피질의 뉴런들이 활성화 된다

뉴런들간의 연결을 시냅스라고 하는데 한 뉴런이 활성화 되면 시냅스로 연결된 인접뉴런들에 신경흥분이 전달되고 이 신경흥분이 일정치에 도달하면 인접뉴런도 활성화되게 된다

예를들어 시신경이 어떤 사물, 예를들어 사과를 볼때

사과의 곡선, 꼭지가 중상단에 위치한다는점, 대체로 빨갛고 속은 연노란색이라는 점등에 의해 자극되는 뉴런들과

배를 볼때 자극 되는 뉴런들에 차이가 생기고

이 뉴런 활성화의 차이에 의해 뇌는 사물을 구별할 수 있다

또 하나 재밌는 점은 뇌는 사물을 불변표상으로 기억하는데 이 불변표상의 형성은 사물을 처음본 순간 일어난다

신피질은 각 계층간의 끝없는 입력과 피드백으로 신피질 자체에서도 정보를 저장하고 있기 때문에

사물을 볼때 각 계층마다 사물을 이해할수 있는 정보가 존재하고

현재 계층에서 이해할수 없는 정보일경우 상위 계층으로 올려보내 사물을 이해하고

현재 계층에서 이해가 가능한 정보라면 아래 계층에서 올라온 정보를 이해한뒤 그에 따른 자극을 아래 계층으로 돌려보낸다(피드백)

근데 살면서 처음본 사물이라면 피질의 어떤 영역에서도 사물에 대한 처리가 불가능한데

이때는 최종적으로 해마로 올라가

해마에서 처음본사물에 대한 불변표상이 정의되고 신피질로 전달된다

해마는 과거의 기억과 시공간을 기억하는 공간인데

주로 처음 영화관을 가거나, 처음으로 친구들과 노래방을 가거나, 처음으로 프로그램을 해킹했을때의 기억은 강하게 남지만 일상생활하면서 내가 오늘 언제 이를 닦았고 길을 걸으면서 10살 이하의 어린아이를 본적이 있고 이런 내용들은 기억에 남지 않는다

즉 신피질이 이해할수 있는 정보였느냐 없는 정보였느냐에 따라 해마에 전달되는 자극의 양과 정도가 달라지기 때문에 기억의 강도가 달라지는 것이다


이 기억은 시간적 순서에 의해 패턴화 되는데

예를들면 내가 좋아하는 노래를 부를때

후렴구의 시작부분은 바로 시작할 수 있지만

후렴구에서 두마디 떨어진 부분부터 시작하려면 기억해내는데 조금더 시간이 걸린다는것을 느낄수 있을것이다

기억의 시각적 특성은 예측에 아주 중요하게 작용하는데

A->B->C->D 라는 순서를 가진 기억이 있다면

내가 현재 A->B->C까지 같은 경험을 하고있다면 이 다음에 나는 D를 경험하게 될것이란것을 예측할 수 있다


이를 머신러닝에 적용하기 위해 말을 재조립해보자면

감각이나 정보가 패턴이 되는 과정은 추상화로 볼 수 있고

추상화된 정보를 기억에서 끌어내 구체적으로 생각하는 것은 뉴런을 자극해 점점 시냅스가 강화되면서 패턴에 해당되는 뉴런들이 활성화 되면서 구체화 되는것으로 볼 수있다

이 피질의 모든 기능을 구현해 해킹을 학습시키고 자동화하는것은 현실적으로 아직 힘들다고 보기 때문에 피질의 몇가지 특징들만을 구현해 목적만 달성할 수 있도록 구상하고 있는데

추상화는 기존 연구들에서도 많이 다루는 내용이기 때문에 기존 연구를 참고해서 변형해보도록 하고

인공신경망을 사용하면 좋을만한 점들을 생각해보고 사용할지 안할지 생각해봐야겠다


1~3일차동안 쓴 글은 처음 접하는 분야기도하고 이해가 안되는 부분도 몇개 있어서 글이 엄청 횡설수설하고 조리가 없다는걸 느끼면서 썼다

이 책은 지능에 대해 내가 지금까지 갖고있었던 생각과 다른 시각으로 바라볼 수 있게 해줬고 지적 정보의 데이터화에 대한 아이디어를 구상하는데 조금 도움을 받은것 같다

내일부터는 이제 본격적으로 머신러닝을 공부하고 기존 연구내용들을 공부해볼 생각이다

신고

설정

트랙백

댓글


티스토리 툴바