(개인적인 의견이 듬뿍 담겨있습니다. 부정확한 정보가 있으면 지적해주세요.)


블랙박스란


머신러닝, 딥러닝에서 말하는 블랙박스(Black Box)란 무엇일까요. 아웃풋은 인간과 유사하게, 원하는대로 도출할 수 있지만 어떻게, 무엇을 근거로 그러한 결과가 나왔는지 알 수 없는 것을 말합니다. 우리가 어떤 사물을 '인형'이라고 인식했을 때, 어떤 과정을 거쳤는지 설명할 수 없는 것처럼 말입니다.



왜 블랙박스가 생길까


딥러닝이 학습하면서 하는 일은 절대적인 정답 또는 해답을 찾는 것이 아닙니다. 인풋이 있을 때 '어떻게' 원하는 아웃풋을 도출하는지를 찾는 것입니다. 일반적으로는 많은 데이터와 지도 학습(supervised learning)을 이용하여 학습시키는데, 어떤 데이터가 주어지느냐에 따라 그 기준도 '상대적'으로 달라질 것입니다.


이 때 내부적으로 원하는 아웃풋을 도출해내기 위한 여러가지 기준을 정하게 되는데 우리는 그 내부를 들여다볼 수 없습니다. 최근의 딥러닝 모델들은 레이어가 최소 수십개로 '딥'하게 학습하기 떄문에 그 계산이 굉장히 복잡하기 때문입니다.



왜 해결해야하는 문제일까


예를 들어보겠습니다. 99%의 정확도로 암을 진단하는, 딥러닝으로 학습시킨 AI 가 있다고 해보죠. 이 AI 가 어떤 환자를 암으로 진단했는데 현대의 의료기술로는 암이라는 증거를 찾을 수 없었습니다. 그렇다면 이 AI는 학습하는 과정에서 자신만의 기준을 찾았다는 것인데 그것은 굉장히 중요한 발견일 수 있습니다. 그것은 설계한 사람이라도 알 수 없을 것입니다.


(이건 개인적인 생각인데, 많은 사람들이 위와 같은 것들 때문에 AI를 완전히 신뢰하지는 못할 것 같습니다. 특히 건강과 같이 민감한 내용들은 정확도가 높더라도 감정 없는 기계보다는 사람에게 듣는 것이 더 믿음이 갈 것 같습니다. 이 때문에 아직까지는 AI가 사람을 완전히 대체하기보다는 보조적인 역할로 사용하는 것이구요. 하지만 빠른 시일 내에 인식의 변화와 함께 본격적으로 인간을 대체하는 비율이 높아질 것 같습니다.)


만약 딥러닝의 블랙박스 안을 볼 수 있다면 현존하는 많은 문제들을 해결할 수 있을 것입니다.


P.S. 본문과는 동 떨어진 내용이기는 하지만 꽤 좋은 글인 것 같아서 링크를 올립니다. 

(http://www.itdaily.kr/news/articleView.html?idxno=73632)

'인공지능 > 이론' 카테고리의 다른 글

[딥러닝] 딥러닝의 한계  (1) 2017.01.30
[인공지능] 퍼지 이론  (0) 2017.01.30
텐서(tensor)란  (0) 2017.01.30
[Week1] Supervised Learning  (0) 2016.07.24
[Week1] Welcome  (0) 2016.07.24
블로그 이미지

NCookie

,

딥러닝의 블랙박스를 볼 수 있는, 화이트박스로 만들 수 있는 방법에 대해 찾아보다가 퍼지 이론이라는 것에 대해 알게 되었고 그것을 간단하게 정리해봅니다. 



퍼지(fuzzy) 이론이란


기존의 컴퓨터는 부울 논리를 기반으로 대상을 1(True) 또는 0(False)로 판단합니다. 하지만 실생활에서는 이 두 가지만으로 판단을 할 수 없습니다. 


하지만 퍼지 논리의 퍼지 집합에서는 이 두 집합 중 어떤 것에도 속하지 않을 수 있습니다. 대신 각 집합에 대한 소속도롤 통해 0과 1 사이의 수치로 나타냅니다. 어떤 대상에 속해 있을 '가능성'을 나타낸 것이라고 할 수 있습니다.


디지털과 아날로그의 차이라고 생각하셔도 될 것 같습니다.


가능성이라고 말하니 확률과 헷갈릴 수 있는데 이 둘으 완전히 다릅니다. '확률'은 수학적으로 예측된 명확한 수치이고, '가능성'은 경험에 기반한 어떤 느낌 같은 것이라고 할 수 있습니다. 그렇기 때문에 퍼지 논리를 '가능성 이론' 또는 '회색 이론'이라고도 합니다.



어디에 사용할까


일상생활에서 조금, 보통, 매우 같은 단어들을 많이 사용하는데요, 이와 같이 자연언어 등의 애매함을 수치로 나타내기 위해 퍼지 이론을 사용합니다.


우리가 생활에서 접할 수 있는 전자 제품 등에도 많이 적용되고 있습니다. 대표적인 예로 카메라의 손떨림 보정 기능 등이 있습니다. 이 외의 사례들은 검색하면 많이 나오고 여기서는 중요한 내용이 아니므로 여기서 넘어가겠습니다.



여기까지 적어보니 제가 직접 쓴 건 거의 없고 그냥 여러 군데에서 짜집기한 것들이 대부분이네요. 그래서 내용을 정리하기보다는 정보를 찾아보면서 느낀 것과 생각한 것에 대해 쓰겠습니다.


블로그에서 퍼지 이론이 실패한 이유에 대해 설명해주시고 있습니다. 이 분이 말씀하신 대로 한 떄 퍼지 이론이 유행했었습니다만 요즘은 그에 대한 내용을 거의 듣지 못했습니다. 그리고 그에 대한 실패 원인에 대해 적혀있는데 저는 현재는 그것들을 해결할 수 있을 것이라고 생각합니다.


요지는 퍼지 이론을 이용한 인공지능은 어떤 상태에 대한 판단은 사람에 따라, 상황에 따라 달라지기 때문에 제대로 적용하지 못한다는 것인데, 아시다시피 이러한 문제들은 딥러닝을 통해 해결할 수 있습니다. (애당초 6년 전과는 많이 달라졌기 때문이지만...)


그렇기 때문에 딥러닝이 핫한 요즘 퍼지 이론이 다시 각광받을 것이라고 생각합니다. 지금보다 훨씬 발전된 인공지능인 다양한 이론들과 모델들을 결합한 하나의 거대한 시스템에서 퍼지 이론이 큰 역할을 하지 않을까 생각합니다.



그리고 애초에 목적이었던 블랙박스 문제를 해결하기 위해 퍼지 이론을 적용한 논문을 찾아봤습니다. 아쉽게도 딥러닝에 대한 것은 아니었지만 실마리가 될 수 있을 것 같습니다.


(http://www.ijfis.org/journal/view.html?doi=10.5391/IJFIS.2016.16.1.27)




'인공지능 > 이론' 카테고리의 다른 글

[딥러닝] 딥러닝의 한계  (1) 2017.01.30
[머신러닝] 블랙박스(Black Box)  (0) 2017.01.30
텐서(tensor)란  (0) 2017.01.30
[Week1] Supervised Learning  (0) 2016.07.24
[Week1] Welcome  (0) 2016.07.24
블로그 이미지

NCookie

,

친구에게 tensorflow 의 tensor 가 뭐냐는 질문에 명확하게 대답할 수 없어서 tensor 에 대해서 찾아보았습니다.


이전에 tensorflow 문서에서 0-rank tensor 를 scalar, 1-rank tensor 를 vector, 2-rank tensor를 matrix 라고 수학적으로 표현한다고 보기는 했었지만 그에 대한 의미를 이해하지는 못했었습니다.


http://egloos.zum.com/hanmihye/v/3256824


위 링크의 글에서는 tensor 를 설명하기 이전에 scalar, vector에 대해 설명하였습니다. 정리하자면 scalar 는 숫자로 나타내는 크기이고 vector 는 크기와 방향을 가진다는 것인데, tensor 는 방향이 두 개 이상 작용할 때 사용한다는 것입니다... 


하지만 제가 이해했던 것이 맞는지도 확실하지 않았고 중간부터는 잘 이해가 되지 않았습니다. 그래서 다른 링크를 찾아봤습니다만...


http://ghebook.blogspot.kr/2011/06/tensor.html


봐야하는 내용이 엄청 많더군요. 그래서 다음에 보기로 했습니다. (해야할 일이 있는데 중간에 샌거라서...) 그 때 다시 한 번 내용을 정리하겠습니다.

'인공지능 > 이론' 카테고리의 다른 글

[딥러닝] 딥러닝의 한계  (1) 2017.01.30
[머신러닝] 블랙박스(Black Box)  (0) 2017.01.30
[인공지능] 퍼지 이론  (0) 2017.01.30
[Week1] Supervised Learning  (0) 2016.07.24
[Week1] Welcome  (0) 2016.07.24
블로그 이미지

NCookie

,

프로젝트 목적


Qt에 익숙해질겸 간단한 타이머 프로그램을 만들기로 하였습니다.



Qt 설치하기


Qt 설치 : https://wiki.qt.io/Install_Qt_5_on_Ubuntu


우분투 16.04 기준으로 Qt5 를 설치하였습니다.



Qt 특징


- 크로스 플랫폼 지원에 안드로이드, 윈도우 폰 등 모바일도 지원
- 그를 위해 OS와 컴파일러마다 조금씩 다른 라이브러리들의 기능들을 자체적으로 제공
- GUI 뿐만 아니라 콘솔에서도 작동. 애초에 GUI 는 Qt 의 모듈임
- Qt Core 에 Qt GUI 가 포함되어 있음
- Qt 는 GNU software를 활용하기 때문에 개발은 Linux 가 적합


진행 상황

 기본적인 타이머 기능 구현
 누적된 시간(DB 연동)
 스페이스바 누르면 시작/일시정지
 소리 추가
 OS의 API 를 이용하여 시간이 다 되면 창이 가장 상단에 뜨
도록


private slots 이란?

Qt 컴파일러가 따로 있고 슬롯 함수들을 선언하기 위해 사용


Qt 에서는 UI 이벤트를 어떻게 처리할까?

이벤트가 발생하면 시그널을 발생시키고 그것을 받으면 슬롯에서 처리

connect(timer, SIGNAL(timeout()), this, SLOT(showTime()));
// timeout() 이 시그널을 보내면 showTime()이 호출됨



GitHub


https://github.com/NCookies/MyTimer



참고링크


Qt 에 대한 개념을 공부하면서 참고했던 링크입니다.


http://www.korone.net/bbs/board.php?bo_table=qt_lecture&wr_id=475



cross-platform 빌드하기


Ubuntu 16.04, Qt5 기준으로 설명합니다.(Qt4에서 하는 방법)


1. git clone https://github.com/mxe/mxe.git


2. dependencies build 설치

apt-get install \
    autoconf automake autopoint bash bison bzip2 flex gettext\
    git g++ gperf intltool libffi-dev libgdk-pixbuf2.0-dev \
    libtool libltdl-dev libssl-dev libxml-parser-perl make \
    openssl p7zip-full patch perl pkg-config python ruby scons \
    sed unzip wget xz-utils
apt-get install g++-multilib libc6-dev-i386


3. 위에서 git 으로 mxe 를 받았으면 mxe 디렉터리가 생깁니다.

cd mxe && make qt5


4. <mxe root>는 mxe를 설치한 디렉터리 절대경로입니다. 이 부분을 설정해주지 않으면 뒤에서 오류가 발생할 수 있습니다.

export PATH=<mxe root>/usr/bin:$PATH


5. 빌드할 qt 프로젝트 디렉터리에서 다음 명령을 실행합니다.

<mxe root>/usr/bin/i686-w64-mingw32.static-qmake-qt5 && make


6. 중간에 에러가 발생하지 않는다면 release 디렉터리 안에 exe 파일이 생깁니다. 테스트 결과 윈도우에서도 정상적으로 작동합니다.

wine release/foo.exe



오류




make[1]: i686-w64-mingw32.static-g++: 명령을 찾지 못했음

Makefile.Release:387: 'release/main.o' 타겟에 대한 명령이 실패했습니다

make[1]: *** [release/main.o] 오류 127

make[1]: 디렉터리 '/home/ryu/QtProjects/MyTimer' 나감

Makefile:34: 'release' 타겟에 대한 명령이 실패했습니다

make: *** [release] 오류 2

해결 방법 => export PATH=/home/ryu/QtProjects/mxe/usr/bin:$PATH


'프로젝트' 카테고리의 다른 글

버전 네이밍과 브랜치  (0) 2017.12.01
[UML] Use Case Diagram  (0) 2017.04.12
블로그 이미지

NCookie

,

약 반년동안 머신러닝 공부하겠다고 별 뻘짓을 했었는데, 그 동안 참고했던 링크들을 정리해봅니다. 꾸준히 업데이트할 예정입니다.



입문


머신러닝 공부를 시작할 때 어떤 것으로 선택하느냐에 따라 계속 할지 안 할지에 영향을 많이 끼치는 것 같습니다. 개인적으로 모두를 위한 딥러닝 강좌를 먼저 보고 코세라 강좌를 보면 좋을 것 같습니다.


1. Andrew Ag 코세라 머신러닝 강좌

(https://www.coursera.org/learn/machine-learning)


대부분의 분들이 입문자에게 이 강좌를 추천합니다. 저 또한 그러고요. 확실히 교수님께서 수학적 요소는 최대한 배제하고 직관적으로 설명해주십니다. 영어 자막을 지원해주므로 영어를 잘 못하셔도 시간만 투자한다면 들을 수 있습니다. 


(이 블로그에서 강좌 ppt 내용과 함께 간단하게 정리해놓았습니다)



2. 모두를 위한 딥러닝

(https://hunkim.github.io/ml/)


강의를 해주시는 분이 홍콩에서 대학 교수를 하고 계시는 한국분이시기 때문에 한국어로 편하게 들을 수 있습니다. 코세라 강좌는 영어라서 진행 속도가 많이 느렸지만 이 강좌는 언어적인 어려움도 없고 굉장히 쉽고 친절하게 설명해주십니다. 따라칠 수 있는 Tensorflow 예제도 함께 보여주십니다.



3. C++로 배우는 딥러닝

(http://m.blog.naver.com/atelierjpro/220697890605)


말 그대로 C++로 딥러닝을 구현하는 방법에 대한 강의입니다. 홍정모 교수님께서 개념과 함께 설명해주십니다. 자세한 내용은 저도 아직 들어보지 못해서 잘 모르겠네요.



스터디 가이드


머신러닝을 어떻게 공부할지 가이드라인을 제시해주는 아주 고마운 사이트들입니다.


1. 수학을 포기한 직업 프로그래머가 머신러닝 학습을 시작하기위한 학습법 소개

(http://www.moreagile.net/2015/05/how-to-start-machine-learning-study.html)



2. 머신러닝, 제대로 배우는 법

(https://brunch.co.kr/@aidenswmo/2)



3. 머신러닝/딥러닝 강의 7가지 추천

(https://www.youtube.com/watch?v=LBexv9M-SBc&index=3&list=PL0oFI08O71gKEXITQ7OG2SCCXkrtid7Fq)


사실 가이드라고 하기는 그렇지만 좋은 강의들을 추천해주십니다.



프로젝트


실제 코드를 작성하고 프로젝트를 진행하면서 이해하기를 원하시는 분들도 있을 것입니다. 저도 아직 해보지는 않았지만 꽤나 도움이 되리라 생각합니다.


1. 6 Fun Machine Learning Projects for Beginners


초보자들도 진행할 수 있는 프로젝트들입니다. 꽤나 흥미로운 주제들이고 그에 대한 간단한 설명, 그리고 트레이닝 데이터와 튜토리얼 링크도 제공합니다.


2. BWAPI

알파고를 만든 딥마인드에서 지난해 말에 AI 연구를 위해 StarCraft 2 API 를 제공하겠다고 발표했었습니다. 그 때 한 번 자료를 찾아보고 얼마 전에 다시 포럼에 들어갔었는데 아직은 기다려야하는 것 같습니다. 
그래서 뭔가 안타까운 마음에 구글링을 했었는데 이것을 발견할 수 있었습니다. Brood War API 인데, C++을 이용하여 스타크래프트 내의 조작을 할 수 있습니다. 이를 이용하여 AI를 제작하는데 자신이 만든 봇으로 다른 봇들과 대결할 수 있는 대회도 있습니다.  


블로그


1. T-Robotics

(http://t-robotics.blogspot.kr/)


미국에서 박사 과정을 밟고 계시는 Terry TaeWoong Um 라는 분이 운영하시는 블로그입니다. 로봇에 관한 내용들이 주이지만 최근에는 인공지능과 관련된 글들을 많이 작성하십니다. 그리고 테리의 딥러닝 토크라고 유튜브에서 머신러닝과 관련된 이야기들을 짧고 재미있게 말씀하시는 영상들이 있습니다. 공부했던 것을 한 번 훑어보는 느낌으로 보셔도 좋을 것 같습니다.



2. sanghyukchun.github.io/

(http://sanghyukchun.github.io/)


구글링을 하다보면 상당히 자주 보게 되는 곳인데요, 머신러닝에 대해 수준 있는 글들을 작성하십니다. 많은 도움이 됩니다.



3. 모두의 연구소 기술 블로그

(http://www.whydsp.org/category/%EB%94%A5%EB%9F%AC%EB%8B%9D%EC%97%B0%EA%B5%AC%EC%8B%A4)


많은 논문 자료들도 볼 수 있고 머신러닝/딥러닝의 개념 등 도움이 되는 글들이 많이 있습니다. 


수학


1. KHANACADEMY: LINEAR ALGEBRA

(https://www.khanacademy.org/math/linear-algebra)


아시다시피 선형대수학은 머신러닝 분야에서 필수적인 요소입니다. 아직 고등학생이라 이 부분을 어떻게 해결할지 고민이었는데, 이 강좌에서는 아주 기초적인 것부터 설명합니다. 앞 부부은 한글 자막도 지원하기 때문에 가벼운 마음으로 보셔도 될 듯합니다. 



2. 다크 프로그래머

(http://darkpgmr.tistory.com/)


머신러닝 뿐만 아니라 영상처리에 도 글을 올리시는데 저는 주로 수학과 관련된 자료를 찾다가 많은 도움이 되었습니다.

블로그 이미지

NCookie

,