NLP 기술이란?


사람이 말하고 쓰는 것들을 사람의 개입 없이 기계가 이해할 수 있는 형태로 만드는 것 또는 그러한 형태를 사람이 이해할 수 있게 만드는 것을 자연어 처리 기술이라고 합니다. 컴퓨터가 이해할 수 있는 형태로 표현하고자 한다는 점에서 인공지능과 밀접한 관련이 있고 딥러닝과 함께 각광받는 기술 중 하나입니다.



Opinion Mining


SNS, 포털 사이트, 쇼핑몰 등으로부터 여러 의견을 담은 글을 대량으로 수집하여, 몇 가지 주제에 대한 의견을 분석하는 것을 Opinion Mining 이라고 합니다. 이 기술을 통해 특정 제품에 대한 고객들의 의견을 종합하여 다음 제품에서 그 의견들을 적용할 수도 있습니다. 즉, 텍스트를 분석해 필요한 의미 정보를 추출하려는 시도라고 할 수 있을 것입니다.


Curation


구글 광고나 쇼핑몰 사이트에서 자신이 관심있어 하고 필요한 상품들을 보여주는 것은 이제는 흔한 일입니다. 이렇게 사용자의 패턴을 분석하여 사용자의 선호도나 의도에 맞게 콘텐츠를 제공하는 것을 Curation이라고 합니다.


Question Answering


질문을 분석하여 그 의도를 알아내고 그에 적합한 대답을 도출해내는 기술을 Question Answering 이라고 합니다. 이 기술의 대표적인 예시로는 IBM의 Watson이 2011년에 퀴즈쇼에서 우승한 것이 있을 것입니다. 다양한 기술들이 융합되었지만 질문을 분석하고 정답을 탐색하는 것은 반드시 자연어 처리 기술이 필요합니다. 


Narrative Technology


Narrative Technology는 특정한 주제에 대해 사람들이 쉽게 이해하도록 자연스럽게 자동으로 글을 쓰는 기술을 말합니다. 아마 인공지능이 기사를 작성한다는 이야기는 들어보셨을 것입니다. 최근에는 주어진 어떤 사건에서 주어진 관점으로 글을 쓰는 기술도 연구되고 있다고 합니다. 이 기술은 쉽게 이해하기 어려운 표나 차트를 쉽게 말로 풀어쓰는 등으로도 응용될 수 있습니다.


Personal Assistant


위와 같은 기술들을 자연어 인터페이스를 제공하여 디바이스(스마트폰 등)나 메신저에서 서비스를 제공하는 것을 Personal Assistant라고 합니다. 대화를 통해 서비스의 질을 높이려는 Siri를 대표적인 예로 들을 수 있을 것입니다.




마치며


챗봇을 만들겠다며 여러 자료들을 조사하고 공부를 하였지만, 생각해보니 자연어 처리가 정확하게 무엇이고 어떤 것들이 있는지는 잘 몰랐던 것 같습니다. 우선 서두르지 않고, NLP, NLU 기술들을 공부하며 정리해나가고 싶습니다.



참고


http://blog.ncsoft.com/?p=4837


https://ko.wikipedia.org/wiki/%EC%9E%90%EC%97%B0_%EC%96%B8%EC%96%B4_%EC%B2%98%EB%A6%AC

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

DEEP LEARNING FOR CHATBOTS - Part 2  (0) 2017.04.10
DEEP LEARNING FOR CHATBOTS - Part 1  (0) 2017.03.28
텍스트를 기계가 이해하는 방법  (0) 2017.03.27
블로그 이미지

NCookie

,

RNN

인공지능/Deeplearning 2017. 4. 10. 22:34

아래 내용들은 위 블로그들의 내용을 정리한 것입니다.

  • RNN 기반의 언어 모델
  • 언어 모델은 두 가지로 응용될 수 있음
    1. 실제 세상에서 어떤 임의의 문장이 존재할 확률이 어느 정도인지에 대한 스코어를 매기는 것
      • 문장이 문법적으로나 의미적으로 어느 정도 올바른지 측정할 수 있도록 해주고, 보통 자동 번역 시스템의 일부로 활용됨
    2. 새로운 문장의 생성
      • 셰익스피어의 소설에 언어 모델을 학습시키면 셰익스피어가 쓴 글과 비슷한 글을 네트워크가 자동으로 생성

RNN이란?

  • 기존의 신경망 구조에서는 모든 입력(과 출력)이 각각 독립적이라고 가정했지만 대부분의 경우는 이에 적합하지 않음
  • 순차적인 정보를 처리
  • 동일한 태스크를 한 시퀀스의 모든 요소마다 적용
  • 출력 결과는 이전의 계산 결과에 영향
  • RNN은 현재까지 계산된 결과에 대한 "메모리" 정보를 갖고 있다고 볼 수도 있음

- x_t 는 시간 스텝(time step) t에서의 입력값임 - s_t 는 시간 스텝 t에서의 hidden state. 네트워크의 '메모리' 부분 -

- 이 때 f는 보통 tanh 나 ReLU 가 사용됨 - 첫 hidden state를 계산하기 위한 s_t-1 은 0으로 설정됨 *** - s_t는 과거의 시간 스텝들에서 일어난 일들에 대한 정보를 전부 담고 있고, 출력값 o_t는 오로지 현재 시간 스텝 t의 메모리에만 의존 - 실제 구현에서는 너무 먼 과거에 일어난 일들은 잘 기억하지 못함 *** - 모든 시간 스텝에 대해 파라미터 값을 전부 공유하고 있음 (위 그림의 U, V, W) - 이는 RNN이 각 스텝마다 입력값만 다를 뿐 거의 똑같은 계산을 하고 있다는 것을 보여줌 - 이는 학습해야 하는 파라미터 수를 많이 줄여줌 *** - 위 다이어그램에서는 매 시간 스텝마다 출력값을 내지만, 문제에 따라 달라질 수 있음 - 예를 들어, 문장에서 긍정/부정적인 감정을 추측하고 싶다면 굳이 모든 단어 위치에 대해 추측값을 내지 않고 최종 추측값 하나만 내서 판단하는 것이 더 유용할 수도 있음 - 마찬가지로, 입력값 역시 매 시간 스텝마다 꼭 다 필요한 것은 아님 RNN에서의 핵심은 시퀀스 정보에 대해 어떠한 정보를 추출해 주는 hidden state이기 때문

RNN으로 할 수 있는 일

  • 가장 많이 사용되는 RNN의 종류는 LSTM
  • hidden state를 계산하는 방법이 조금 다를 뿐 나머지는 거의 같음
  1. 언어 모델링과 텍스트 생성
  • 주어진 문장에서 이전 단어들을 보고 다음 단어가 나올 확률을 계산해주는 모델
  • 어떤 문장이 실제로 존재할 확률이 얼마나 되는지 계산
  • 부수적인 효과로 생성(generative) 모델을 얻을 수 있음
  • 문장의 다음 단어가 무엇이 되면 좋을지 정하면 새로운 문장을 생성할 수 있음
  • 네트워크를 학습할 때에는 시간 스텝 t에서의 출력값이 실제로 다음 입력 단어가 되도록 o_t=x_{t+1}로 정해줌
  1. 자동 번역 (기계 번역)
  • 입력이 단어들의 시퀀스라는 점에서 언어 모델링과 비슷하지만, 출력값이 다른 언어로 되어있는 단어들의 시퀀스임
  • 입력값을 전부 다 받아들인 다음에서야 네트워크가 출력값을 내보냄
  • 언어마다 어순이 다르기 때문에 대상 언어의 첫 단어를 얻기 위해 전체를 봐야할 수도 있음
  1. 음성 인식
  • 사운드 웨이브의 음향 신호(acoustic signal)를 입력으로 받아들이고, 출력으로는 음소(phonetic segment)들의 시퀀스와 각각의 음소별 확률 분포를 추측할 수 있음
  1. 이미지 캡션 생성
  • CNN과 RNN을 함께 사용하여 임의의 이미지를 텍스트로 설명해주는 시스템을 만들 수 있음

RNN 학습하기

  • 학습 과정은 기존의 뉴럴넷과 크게 다르지 않음
  • 다만 time step 마다 파라미터를 공유하기 때문에 기존의 backpropagation을 그대로 사용할 수는 없음
  • 대신 Backpropagation Through Time (BPTT)라는 알고리즘을 사용함(추후 다룰 예정)
  • vanishing/exploding gradient라는 문제 때문에 긴 시퀸스를 다루기 어려움
  • LSTM 과 트릭 등을 통해 이러한 문제점 해결

RNN - 확장된 모델들

  1. Bidirectional RNN
  • 시간 스텝 t에서의 출력값이 이전 시간 스텝 외에, 이후의 시간 스텝에서 들어오는 입력값에도 영향을 받을 수 있다는 아이디어에 기반
  • 출력값은 앞, 뒤 두 RNN의 hidden state에 모두 의존하도록 계산됨

  1. Deep (Bidirectional) RNN
  • 위의 구조에서 layer 의 개수가 늘어남
  • 학습할 수 있는 capacity가 늘어나며 그만큼 필요한 학습 데이터 또한 많이 필요함

  1. LSTM
  • 뉴런 대신에 메모리 셀이라고 불리는 구조 사용
  • 입력값으로 이전 state h_t-1와 현재 입력값 x_t를 입력으로 받는 블랙박스 형태(???)
  • 메모리 셀 내부에서는 이전 메모리 값을 그대로 남길지 지울지 정하고, 현재 state와 메모리 셀의 입력값을 토대로 현재 메모리에 저장할 값을 계산
  • 긴 시퀀스를 기억하는데 매우 효과적


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

weight 초기화  (0) 2017.03.06
블로그 이미지

NCookie

,

참고 
http://www.wildml.com/2016/07/deep-learning-for-chatbots-2-retrieval-based-model-tensorflow/ - 원문http://mlduck.tistory.com/7 - 번역

DEEP LEARNING FOR CHATBOTS - Part 2

  • 이번에는 검색기반 봇을 구현할 것임
  • 생성 모델이 좀 더 유연한 반응을 끌어낼 수 있지만 실용화 단계는 아님
  • 수 많은 훈련 데이터가 필요하고 최적화가 어렵기 때문
  • 현존하는 대부분의 챗봇은 검색기반 또는 검색기반과 생성 모델을 결합한 것임
  • 그렇다면 Schedule Manager 에서는 일정 관리 대화만 검색기반으로 하고 나머지 도메인은 생성 모델로 하는건 어떨까?

data set

  • buntu Dialog Corpus (UDC) 는 이용가능한 가장 큰 공개 대화 데이터셋 중 하나
  • 훈련 데이터는 1,000,000 개의 예제와 50% 긍정 (label 1), 50% 부정 (label 0)으로 이루어져있음
  • 각 예제는 문맥과, 그 시점까지의 대화, 발언utterance, 문맥에 대한 응답으로 구성
  • 긍정은 실제 문맥에 대한 옳은 응답인 것이고 부정은 정답 외에 랜덤으로 뽑음
  • 모델 평가 방법 : reacll@k
    • 모델이 10개의 가능한 응답 중 k개의 좋은 응답을 고르도록 함
    • 이 중에서 정답이 있다면 그 예제는 정답 처리됨
    • 따라서 k가 커질수록 정답률이 높아짐
    • k=10 이면 100% 의 recall 을 얻음
    • k=1 이면, 모델은 정답 응답을 고를 단 한번의 기회밖에 없음
    • 이 데이터셋에서 9 distractors는 랜덤하게 골라졌지만, 실제 세계에서는 몇 백만개의 가능한 응답이 있을 수 있고, 어느 것이 옳은지 모름
    • 이 모든 것을 평가하는 것은 비용이 너무 큼
    • 아니면 가능한 응답이 몇 백개 정도 밖에 없다면 모두 평가할 수 있음
    • Google Smart Reply 는 클러스터링 기술을 사용하여 처음부터 선택할 수있는 일련의 가능한 응답을 제시함

BASELINES

  • 어떤 종류의 성능을 원하는지 이해하기 위해 간단한 baseline 모델(자세한 설명은 주석에)
def evaluate_recall(y, y_test, k=1):    # recall@k 알고리즘을 구현한 함수
    num_examples = float(len(y))
    num_correct = 0
    for predictions, label in zip(y, y_test):
        if label in predictions[:k]:    # k 개의 prediction 중 정답(label)이 있는지 확인
            num_correct += 1    // prediction 에서 앞쪽에 있을수록 높은 점수를 얻은 것임
    return num_correct/num_examples    # 정답률을 반환함
  • first one (index 0) is always the correct one because the utterance column comes before the distractor columns in our data.
  • 이 부분은 잘 이해가 되지 않음...
# Random Predictor
def predict_random(context, utterances):
    return np.random.choice(len(utterances), 10, replace=False)
    # 10개를 중복 없이 랜덤으로 추출함
# Evaluate Random predictor
y_random = [predict_random(test_df.Context[x], test_df.iloc[x,1:].values) for x in range(len(test_df))]
y_test = np.zeros(len(y_random))
for n in [1, 2, 5, 10]:
print("Recall @ ({}, 10): {:g}".format(n, evaluate_recall(y_random, y_test, n)))
  • original paper에서 언급한 것은 random predictor가 아니라 tf-idf 임무
  • term frequency – inverse document frequency : 문서에서의 단어가 전체 문서집합에서 상대적으로 얼마나 중요한지를 측정
  • 직관적으로, 문맥과 응답이 비슷한 단어를 가지고 있다면, 그 둘은 올바른 쌍일 가능성이 큼
  • 적어도 random predictor 보다는 가능성이 높음
  • 그렇지만 여전히 만족스러운 성능은 나오지 않음
  • tf-idf는 중요한 신호가 될 수 있는 단어의 순서를 무시함
  • 따라서 이를 보완할 neural network를 함께 사용

DUAL ENCODER LSTM

  • Dual Encoder LSTM network
  • 이 타입의 네트워크는 이 문제에 적용할 수 있는 모델 중 하나임
  • 물론 가장 좋은 것은 아님
  • 기계 번역 분야에서 자주 쓰이는 seq2seq 도 이 문제에 적합함
  • 여기서 Dual Encoder 를 사용하는 이유는 이 문제에 대해 성능이 잘 나온다는 논문이 있기 때문(본문의 링크 참조)

error

블로그 이미지

NCookie

,

참고 
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

,

딥러닝에서는 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

,