참고 
http://www.wildml.com/2016/04/deep-learning-for-chatbots-part-1-introduction/ - 원문 
http://mlduck.tistory.com/6 - 번역

Description

DEEP LEARNING FOR CHATBOTS - Part 1

A TAXONOMY OF MODELS

RETRIEVAL-BASED VS. GENERATIVE MODELS

검색 기반 모델(easier)

  • 입력과 문맥에 기반한 적절한 응답
  • 대답이 선-정의(predefine) 되어 있음
  • 새로운 대답을 생성하지 않음
  • 문법적 실수 X
  • 대화가 자연스럽지 않음

생성 모델(harder)

  • 대답이 선-정의(predefine) 되어 있지 않음
  • 밑바닥부터 새로운 응답 생성
  • 일반적으로 기계 번역 기술에 기반함
  • 일반적으로 훈련이 어렵고 필요한 데이터 양이 많음
  • 문법 실수 가능성이 있음

LONG VS. SHORT CONVERSATIONS

  • 당연한 이야기지만 대화가 길어질수록 자동화하기 어려움
  • Short-Text Conversations (easier) : 단일 입력 - 단일 응답

OPEN DOMAIN VS. CLOSED DOMAIN

open domain(easier)

  • 사용자가 대화를 어디서든 할 수 있음
  • 다양한 토픽과 방대한 지식 필요
  • ex) twitter, reddit 같은 SNS 등

closed domain(harder)

  • 특정 문제만을 처리함
  • 쉬운 대신 여러 방면으로 한계가 있음
  • ex) technical support, shopping assistants

COMMON CHALLENGES

대화 에이전트를 만들기 위해 해결해야할 다소 명백하지 않은 문제들로, 대부분 활발하게 연구되고 있음

INCORPORATING CONTEXT(문맥 합치기)

  • 합리적인 응답 시스템을 위해서는 linguistic context 와 physical context 를 모두 포함해야 함
  • linguistic context : 긴 대화에서 사람들이 무엇을 말했는지, 어떤 정보가 교환되었는지 등
  • 이에 대한 대부분의 접근법은 word-embeded 이지만 긴 문장에서는 적용이 어려움
  • 날짜 / 시간, 위치 또는 사용자에 대한 정보와 같은 다른 유형의 상황 별 데이터를 통합해야 할 수도 있음

COHERENT PERSONALITY(성향 일관성)

  • 대화 에이전트는 의미적으로 동일한 질문에 대해 동일한 대답을 해야 함
  • 많은 시스템은 linguistic하게 그럴듯한 응답을 생성하도록 학습하지만, 의미적으로 일관성있게 생성하도록 학습하지는 않음
  • A Persona-Based Neural Conversation Model는 명시적으로 성향을 모델링하는 방향에 대한 첫걸음

EVALUATION OF MODELS

  • 대화 에이전트를 평가하는 이상적인 방법은 임무를 달성했는지 확인하는 것
  • 하지만 사람이 일일이 해야하기 때문에 레이블을 얻기 힘듦
  • 특히 opend domain 처럼 잘 정의된 목적이 없을 때는 더더욱...

INTENTION AND DIVERSITY

  • 생성 모델의 공통적인 문제는 많은 입력에 잘 어울리는 일반적인 대답을 하는 경향이 있다는 것임
  • ex) "That's great!", "I don't know"
  • 다양성을 증진하기 위해 여러 시도
  • 그러나 인간은 일반적으로 입력에 대해서 특정 응답을 하고 의도를 담음
  • 특정 의도를 가지도록 훈련되지 않았으므로, 이러한 종류의 다양성이 부족

HOW WELL DOES IT ACTUALLY WORK?

검색기반 모델(retrieval based model)은 사실상 opend domain 에서의 사용이 불가능하다. 사람이 모든 경우에 대해 대답을 준비할 수 없기 때문이다. 그리고 opend domain 에서의 생성 모델(generative model)은 거의 AGI(Artificial General Intelligence, 강인공지능)이다. 모든 경우를 다루어야하기 때문이다. 대화가 길어질수록 문맥이 중요해지고 문제도 더 어려워진다.

다음은 최근 Andrew Ng 교수의 인터뷰이다.

Most of the value of deep learning today is in narrow domains where you can get a lot of data. Here’s one example of something it cannot do: have a meaningful conversation. There are demos, and if you cherry-pick the conversation, it looks like it’s having a meaningful conversation, but if you actually try it yourself, it quickly goes off the rails.


블로그 이미지

NCookie

,

참고 https://www.lucypark.kr/slides/2015-pyconkr/#1

텍스트를 표현하는 방법

기계는 텍스트를 이해하지 못함

단어를 표현하는 방법

  1. 이진(bianry) 표현법
    • w_i 은 i 번 단어에 대한 벡터 표현
    • one-hot vector
    • 단어 간 유사도 정의 불가능
  2. BOW(bag of words)
    • 단어가 문서에 존재/존재하지 않음 -> term existance
    • 단어가 문서에 n번 존재함 -> term frequency(TF)
    • 단어에 중요도를 할당하고 문서에 등장한 단어 중요도의 가중합
    • 차원이 너무 커서 문서 간 유사도 지표의 효과가 떨어짐
    • http://darkpgmr.tistory.com/125 참고
  3. WordNet
    • 단어들의 상위어(hypernym) 관계 등을 정의하는 방향성 비순환 그래프
    • 모든 용어를 포함하지 못함(전문 도메인 용어 등)
    • 신조어를 추가하기 위해서는 수동으로 유지보수 해야함

위의 방법들로는 단어를 나타내기 힘듬 
=> 문맥(context)을 파악해야함


문맥을 파악하는 방법

  • 단어의 의미는 해당 문맥이 담고 있음
  • 문맥(context) := 정해진 구간(window) 또는 문장/문서 내의 단어들

Co-occurrence(공기, 共起)

  • 단어와 단어가 하나의 문서나 문장에서 함께 쓰임
  • 정의하는 두 가지 방법
    • Term-document matrix : 한 문서에 같이 등장하면 비슷한 단어
    • Term-term matrix : 단어가 문맥 내에 같이 존재하면 비슷한 단어
  • 값들이 너무 편향(skewed)되어 있음(빈도 높은 단어와 낮은 단어의 격차가 큼)
  • 정보성 낮은 단어 때문에 구별하기 쉽지 않음(discriminative)

Neural embeddings

  • 문맥에 있는 단어를 예측
  • 언어 모델(language model) 활용
  • ["나는", "파이썬", "이", "좋다"] 다음에 뭐가 나올까? ("!", ".". "?")
  • 이것을 학습할 때 neural net 사용
  • word2vec 이 여기에 포함
  • 문서에서의 neural embedding
    • doc2vec(paragraph vector)
    • 문서(또는 문단) 벡터를 마치 단어인 양 학습
    • 차원이 |V| 에 비해 훨씬 적어짐
    • Term frequency : 문서 벡터의 크키가 단어의 수 |V|와 같음
    • doc2vec : 문서 벡터의 크기가 단어의 수 |V| 보다 작음


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

자연어 처리(Natural Language Processing)  (1) 2017.05.17
DEEP LEARNING FOR CHATBOTS - Part 2  (0) 2017.04.10
DEEP LEARNING FOR CHATBOTS - Part 1  (0) 2017.03.28
블로그 이미지

NCookie

,

v0.42 를 기준으로 합니다.


npm 이나 Android Studio 의 설치 방법은 따로 설명하지 않습니다.



npm install -g react-native-cli



Android Studio 설치 과정에서 Custom 모드로 


Android SDK

Android SDK Platform

Android Virtual Device 


이 세가지를 선택합니다.


Android 6.0 (Marshmallow) 목록에서 


Google APIs

Android SDK Platform 23

Intel x86 Atom_64 System Image

Google APIs Intel x86 Atom_64 System Image


를 설치합니다.


Build Tools 에서 Android SDK Build-Tools 23.0.1 도 설치.


~/.bashrc 또는 ~/.bash_profile 에 


export ANDROID_HOME=${HOME}/Android/Sdk

export PATH=${PATH}:${ANDROID_HOME}/tools

export PATH=${PATH}:${ANDROID_HOME}/platform-tools


추가. 당연히 실제로는 저 중괄호를 지워야하겠죠.


그리고 watchman 이라는 프로그램을 설치할 것을 권장하네요. 옵션입니다.

(https://facebook.github.io/watchman/docs/install.html#build-install)



Android Studio 에서 설치되어있는 Emulator 를 실행.


react-native init AwesomeProject

cd AwesomeProject

react-native run-android


프로젝트 폴더를 만들고 실행을 시킵니다. 만약 "could not connect to development server... " 라는 에러 메시지가 화면에 뜬다면


따로 터미널 창을 열고 npm start 명령을 칩니다.



참고)


React-native 'app is not registered' error


이 에러는 코드에서 registerComponent 함수의 인자가 잘못되었을 때 발생하는 에러입니다.

블로그 이미지

NCookie

,

딥러닝에서는 weight 를 학습하여 모델을 최적화합니다.


weight 의 초기화르 어떻게 하느냐에 따라 학습 속도가 달라지는데, 자칫 잘못하면 모델 자체의 성능이 굉장히 떨어질 수 있습니다.


이 문제 때문에 Neural Winter 가 찾아왔었습니다. (용어가 정확히 맞는지는 잘 모르겠네요.)


Neural Winter 에는 weight 초기화 문제 외에도 다른 요인들이 겹쳐서 찾아오기는 했지만 중요하다는 사실은 부정할 수 없을 것입니다.


어쨌든 Godfather of Deeplearning 이라고 불리는 Jeffrey Hinton 교수님께서 기존 뉴럴넷의 문제들을 해결했는데 그 중 weight 초기화도 있었습니다.


그 분께서 제시한 방법은 RBM(Restricted Boltzmann machine)을 이용하여 network 의 weight 를 초기화하는 것이었습니다. 이 방법을 사용한 뉴럴넷을 Deep Belief Net 라고 부른다고 합니다.



그 이후로 많은 논문들이 나오면서 훨씬 성능이 좋은 initialization 들이 나왔습니다. 저 같은 사람들은 그런 것들을 모두 읽어보고 이해할 필요는 없고, 어떤 상황에서 사용하는 것이 적합할지 알기만 하면 될 것입니다. 왠만한건 Tensorflow 같은 프레임워크에서 쉽게 사용할 수 있도록 지원하기 때문입니다.


initialization 에는 여러 종류가 있는데 요즘 사용하는 것들 중 대표적으로 Xavier / He initialization 등이 있습니다. 자세한 내용은 나중에 다시 공부해서 추가하겠습니다.


# Xavior initialization

W = np,random.randn(fan_in, fan_out) / np.sqrt(fan_in)


참고로 weight 를 0으로 초기화하는 것은 절대로 안 됩니다. cost 를 줄이는 과정에서 weight 를 미분하게 되는데 0이면 값이 변하지 않기 때문입니다.



마지막으로 중요한 것은, 정해진 초기화 방법은 없다는 것입니다. 문제, 상황 등에 따라 적합한 알고리즘들이 다르기 때문입니다.



참고

https://www.youtube.com/watch?v=4rC0sWrp3Uw&feature=youtu.be

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

RNN  (0) 2017.04.10
블로그 이미지

NCookie

,

(이 글은 약간 다른 이야기로 샐 것 같네요. 그리고 개인적인 생각이 많습니다. 참고하셔서 그냥 재미로 읽어주세요.)

 

위키피디아에서는 인공지능을 다음과 같이 설명하고 있습니다.

 

인공지능(人工知能, artificial intelligence, AI)은 기계로부터 만들어진 지능을 말한다. 컴퓨터 공학에서 이상적인 지능을 갖춘 존재, 혹은 시스템에 의해 만들어진 지능,즉 인공적인 지능을 뜻한다. 일반적으로 범용 컴퓨터에 적용한다고 가정한다. 이 용어는 또한 그와 같은 지능을 만들 수 있는 방법론이나 실현 가능성 등을 연구하는 과학 분야를 지칭하기도 한다.

 

뭐 인공지능이란 무엇이냐라는 질문에 대해 답하려면 의견도 많이 갈리고 꽤나 길어질 것 같으니 일단 제쳐두기로 하겠습니다. 어쨌든 인공지능의를 정의하기는 어렵지만, 아시다시피 현재의 인공지능은 진정한 의미의 인공지능이라고 할 수 없습니다. 

 

인공지능을 약인공지능(weak AI)와 강인공지능(strong AI, 범용인공지능)이라고 구분하기도 합니다.(자세하 것은 구글에...) 그리고 현재의 인공지능은 약인공지능에 해당합니다. 즉, 스스로 사고하지 못하고 주어진 문제에 대해서, 특정 분야에 대해서만 지능을 가지는 것입니다. 

 

최근에는 뉴럴 네트워크를 이용한 딥러닝으로 인간을 뛰어넘고 있죠. 하지만 이는 인간이 모델을 설계하고 목적을 할당했기 때문에 가능한 것입니다. 인간과 같이 '사고'하는 것과는 거리가 멀죠. 심지어 딥러닝의 내부를 볼 수도 없고요. 지금의 딥러닝은 인간의 지능을 모방했다기보다는 인간이 사고하는 것처럼 보이도록 구현한 것입니다.

 

당연한 이야기이지만 딥러닝만으로는 강인공지능을 만들 수 없을 것입니다. 그러기 위해서는 다양한 이론들을 이용한 하나의 거대한 '시스템'을 만들어야 하겠죠.(개인적인 생각입니다) 그 일환으로 퍼지 이론 등이 있습니다. 

 

그래서 퍼지 이론에 대해 알아봤는데 퍼지 규칙을 정할 때 딥러닝을 적용할 수 있지 않을까... 라는 생각을 해보았습니다. 그러다가 이 글을 쓰게 됐고요. 뭐 그렇다고요...

 

 

미래에 인공지능의 발전이 어떻게 될지 궁금하네요. 언젠가는 그 변화의 중심에 있고 싶습니다. 진짜로.

 

우선 이번 방학과 인턴쉽이 끝나고 나면 BWAPI 라는 스타크래프트1 API 를 이용하여 봇을 만들면서 다양한 이론들과 알고리즘들을 적용해보고 싶습니다. 뻘짓이야 엄청 하겠지만 재미있을 것 같습니다. 그 이전에 방학동안 공부를 열심히 해야겠지만 말입니다... ㅎ

 

 

P.S. 인공지능의 미래에 대해 자세히 설명한 좋은 포스트 있습니다. 한 번 시간 잡아서 읽어보세요.

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

[머신러닝] 블랙박스(Black Box)  (0) 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

,

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


블랙박스란


머신러닝, 딥러닝에서 말하는 블랙박스(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

,