라벨이 머신러닝인 게시물 표시

LSTM 네트워크 이해하기

이미지
 이 글은 http://colah.github.io/posts/2015-08-Understanding-LSTMs/ 를 번역하여 정리한 글입니다. -------------------------------------------------------------------------  RNN(Recurrent Neural Network)은 히든 노드가 방향을가진 엣지로 연결되어 순환 구조를 이루는 Neural Network의 한 종류이다. RNN이 기존 Neural Network와 다른 점은 지금 들어온 입력 데이터와 과거에 입력 받았던 데이터를 동시에 고려한다는 점이다. 순환 신경망은 내부에 정보가 지속되는 것을 돕는 순환 구조를 가진 네트워크이며, 과거의 데이터가 미래에 영향을 주는 구조를 가지고 있다. [그림 1] RNN의 기본구조  [그림 1]에서 신경망 A는 $X_t$를 입력 값으로 가지고 $h_t$를 결과 값으로 출력한다. 루프는 정보가 전 단계의 네트워크에서 그 다음 단계로 전달되도록 한다. 순환 신경망은 하나의 네트워크가 여러 개로 복사된 형태를 보이고 있는데, 각각의 네트워크는 현재 갖고있는 정보를 다음 단계로 넘겨준다. [ 그림 2] 펼쳐진 순환 신경망    [그림 2]는 [그림 1]의 순환 구조를 펼쳐 놓은 것이다. RNN의 사슬 같은 모양을 통해 RNN이 시퀀스와 리스트를 처리하는 것과 관련이 있음을 알 수 있다. 따라서 순환 신경망은 연속적인 이벤트, 리스트에 관한 문제를 해결하기 위한 알고리즘으로 적절하기 때문에 시계열 모형 수립에 활용할 수 있다. 순환 신경망의 단점 중 하나는 정보가 오래된 정보를 현재 정보에 반영할 수 없다는 점이다. 이를 해결하기 위해 나타난 것이 LSTM이다. LSTM의 기본 동작 원리는 정보를 오랫동안 기억하는 것이며 [그림 3]은 LSTM의 구조를 나타낸 그림이...

[알고리즘] 파이썬으로 Trie 구현하기(2)

이미지
 1편에 이어 2편이다. 지난 장에서는 trie의 간단한 개념과 생성과 입력 기능에 대해 알아보았다. 이번 편에서는 조회와 삭제에 대해 알아보도록 하겠다. 접두어로 검색  Trie의 가장 큰 장점이라고 생각하는 접두어 검색 기능이다. 단어의 일부분으로 전체단어를 검색할 수 있다. 예를들어 trie에 gold, good, gerald를 저장한 다음 검색어에 g를 입력하면 gold, good, gerald를 모두 검색할 수 있다. 이런 기능은 검색어 자동완성에 쓰인다고 한다. 우선 검색 부분의 코드를 보도록 하겠다. def search_with_prefix(self, prefix): words = list() if prefix is None: raise ValueError('Requires not-Null prefix') top_node = self.head for letter in prefix: if letter in top_node.children: top_node = top_node.children[letter] else: return words if top_node == self.head: queue = [node for key, node in top_node.children.items()] else: queue = [top_node] while queue: current_node = queue.pop() if current_node.data is not None: words.append(current_node.data) queue = [node f...

[알고리즘] 파이썬으로 Trie 구현하기(1)

이미지
 Trie는 이 구조를 구현한 라이브러리도 여럿있어서 파이썬으로 구현하기는 쉬울 것이다. 하지만 trie에 대해 더 잘 이해하고 연습도 할 겸 여기저기에서 참조해가며 직접 만들어 보았다. 이번에는 trie에 대한 간단한 개념과 문자열의 삽입과 조회 부분의 구현까지 진행할 것이다. 특징   Trie는 prefix tree라고도 불리는 트리 구조의 알고리즘이다. Trie는 다음과 같은 특징이 있다. 검색이 빠르고,  문자열을 키로하는 동적 집합이나 연관 배열로 사용되고  노드는 키를 갖지 않는 대신 노드의 위치가 키 역할을 하고  root가 빈 스트링이라는 특징이 있다. 시간 복잡도  시간 복잡도는 알고리즘의 수행시간 분석결과를 나타내는 용어이다. 당연히 시간 복잡도가 낮을수록 좋으며 연산 횟수를 계산하고, 처리해야 할 데이터의 수 n에 대한 연산횟수 함수 T(n)을 구성하여 구한다.  Trie의 시간 복잡도는 대표적인 트리 구조 중 하나인 이진 검색 트리(Binary Search Tree)와 비교를 해보도록 하겠다. 데이타 구조 시간 복잡도 (정수/실수) 이진 검색 트리 O(logN) 문자열 이진 검색 트리 O(MlogN) 트라이 O(M)   문자열은 길이가 변하기 때문에 검색 시간이 많이 소요된다. 길이가 고정된 정수나 실수는 O(logN)의 시간이 걸리지만 문자열은 길이가 변하기 떄문에 문자열의 최대 길이 M을 곱한 O(MlogN)이 된는데 trie는 이러한 문제를 해결하기 위해 고안된 자료구조이다. 트라이의 구조  알파벳만을 사용하여 trie를 구성할 경우 각 노드는 26개의 알파벳과 1개의 공백으로 구성된 27개의 포인터를 갖고있는 배열을 갖고 있다.   문자열 집합 : S = {"BE", "BET", "BUS", "TEA", "TEN"}을 trie로 구성한 그...

[알고리즘] Suffix Tree

이미지
Suffix tree는 문자열의 모든 접미사들을 표현하는 trie 모양의 자료 구조이다. prefix tree라 불리는 trie가 근간이 되는 자료구조인듯 한데 두 자료구조의 차이는 banana라는 단어가 있을 때 trie는 banana라는 단어만 저장을 하지만 suffix tree는 banana, anana, nana, ana, na, a 와 같이 banana라는 단어에서 나올 수 있는 모든 경우의 수를 다 저장한다는 것이다. 쓸데없이 모든 경우를 저장하는 이유는 문자열에 대한 검색을 할 때 필요하기 때문이다. Trie 자료구조 같은 경우에는 ban, ba와 같은 일부분의 단어로 banana라는 완전한 단어를 찾을 수 있지만 nan, ana와 같은 단어로는 banana를 찾을 수 없다. 이러한 문제를 해결하기위해 trie를 개선시킨 것이 suffix tree인듯 하다.  Suffix trie는 trie에 모든 suffix들을 저장한 구조를 의미한다. 아래 그림은 abaaba라는 문자열 T를 suffix tree에 저장하는 예시이다. suffix tree나 suffix trie에 문자열을 저장할 때는 문자열의 끝에 $를 붙이는데 그 이유는 정확히 모르겠다... 아마 문자열의 끝을 알리기 위한 용도인 것 같다. Suffix Trie의 형태  위 그림의 왼쪽과 같은 모양이 suffix trie이다. 여기서 자식 노드가 1개 뿐인 것들을 합치면 오른쪽과 같은 모양이 되는데 저러한 형태의 자료구조를 suffix tree라 한다. Suffix Tree  이 suffix tree는 문자열의 길이만큼의 leaf node를 갖는다  위 그림에서 오른쪽 그림은 tree의 edge label을 (offset, length)의 형태로 T를 나타낸 것이다. Suffix tree의 label  각 노드의 label은 root로부터 node로 연결된 edge의 label과 ...

[번역] National Artificial Intelligence Research and Development Strategic Plan

2016년 10월에 발표된 National Artificial Intelligence Research and Development Strategic Plan 보고서의 Executive Summary 부분을 구글번역기로 번역한 후, 교정한 자료입니다. --------------------------------------------------------------------------------------------- 인공 지능은 엄청난 사회적 경제적 이익을 약속하는 혁신 기술입니다 . 인공 지능은 우리가 살아가고 , 일하고 , 배우고 , 발견하고 , 의사 소통하는 방식에 혁명을 일으킬 잠재력이 있습니다 . 인공 지능 연구는 경제적 번영의 증진 , 교육의 기회와 삶의 질 향상 , 국가 및 국토 안보의 강화 등 우리의 국가 우선 순위를 더욱 높일 수 있습니다 . 이러한 잠재적 이익 때문에 미국 정부는 수년간 인공 지능 연구에 투자 해 왔습니다 . 그러나 연방 정부가 관심을 갖는 중요한 기술과 마찬가지로 엄청난 기회뿐만 아니라 인공 지능에 대한 연방 기금 연구 개발의 전반적인 지침을 수립 할 때 고려해야 할 여러 가지 고려 사항이 있습니다 . 2016 년 5 월 3 일 , 행정부는 AI 의 연방 활동을 조정할 수 있도록 기계 학습 및 인공 지능에 관한 새로운 NSTC 소위원회를 구성한다고 발표했습니다 . 이 소위원회는 2016 년 6 월 15 일 네트워킹 및 정보 기술 연구 소위원회 및 개발 (NITRD) 을 통해 국가 인공 지능 연구 및 개발 전략 계획을 수립했습니다 . 인공 지능에 관한 NITRD 태스크 포스는 AI R& 에 대한 연방의 전략적 우선 순위를 정의하기 위해 형성되었으며 산업계에서는 다루기 힘든 분야에 특히 주의를 기울였습니다 . 이 National Artificial Intelligence R&D Strategic Plan 은 연방 정부의 자금 지원을 받는 인공 지능 연구의 목표를 수립합니...

[머신러닝] Deep Learning Tutorials

이 글은 http://deeplearning.net/tutorial/index.html의 내용을 공부목적으로 번역한 것입니다. 번역이 이상할 수 있고 필요한 내용만 번역되어 있을 수 도 있습니다. -------------------------------------------------------------------------------------------------------------------------------------  딥러닝은 머신러닝의 원래 목표중 하나인 인공지능으로 다가게하는 목적으로 소개된 머신러닝 연구의 새로운 분야다.  딥러닝은 이미지, 소리 그리고 텍스트와 같은 데이터들의 이해를 돕는 다양한계층의 표현과 추상적 개념에 대한 학습이다. 딥러닝 알고리즘에 대한 예제를 보고싶으면 다음을 예를 보면 된다 : The monograph or review paper  Learning Deep Architectures for AI  (Foundations & Trends in Machine Learning, 2009). The ICML 2009 Workshop on Learning Feature Hierarchies  webpage  has a  list of references . The LISA  public wiki  has a  reading list  and a  bibliography . Geoff Hinton has  readings  from 2009’s  NIPS tutorial .  여기있는 튜토리얼들은 가장 중요한 몇개의 딥러닝 알고리즘과 그것을  Theano 를 이용해 어떻게 작동시킬것인지 소개할 것이다. Theano는 딥러닝 모델을 쉽게 배울수 있게하고 그것들을 GPU에서 훈련시킬수 있도록 선택할 수 있는 파이썬 라이브러...

[머신러닝] CNN(Convolution Neural Network)

이미지
Why CNN?  이미지 인식과 같은 분야에서 MLP(Multi-Layer Perceptron) 또는 multi-layered neural network를 사용하게 되면 MLP는 모든 입력이 위치와 상관없이 동일한 수준의 중요도를 갖는다고 본다. 그렇기 때문에 이를 이용해 fully-connected neural network를 구성하게 되면 파라미터의 크기가 엄청나게 커지는 문제가 생긴다. 이에 대한 해결책으로 탄생한 것이 바로 CNN이다. Receptive Field  수용영역이란 외부 자극이 전체 영향을 끼치는 것이 아니라 특정 영역에만 영향을 준다는 뜻이다. 손가락으로 몸의 여러 부분을 찔러 보았을 때 그것을 느낄 수 있는 범위가 제한적이라는 것을 생각하면 될 것이다. 그리고 어디를 찌르느냐에 따라 느끼는 영역의 크기가 다를 것이다.  마찬가지로 영상에서 특정 위치에 있는 픽셀들은 그 주변에 있는 일부 픽셀들 하고만 correlation이 높고 거리가 멀어질수록 그 영향은 감소하게 된다. 이를 이용해 영상이나 이미지를 해석하여 "인식 알고리즘"을 수행하고자 할 경우 영상 전체 영역에 대해 서로 동일한 중요도를 부여하여 처리하는 대신에 특정 범위를 한정해 처리를 하면 훨씬 효과적일 것이라 짐작 할 수 있다. 이를 영상에만 한정하는 것이 아니라 locality를 갖는 모든 신호들에 유사하게 적용할 수있다는 아이디어에 기반하여 출현한 것이 CNN이다. convolution이란?  영상 처리 분야에서 convolution은 주로 filter 연산에 사용되며 영상으로부터 특정 feature들을 추출하기 위한 필터를 구현할 때 convolution을 사용한다. 즉 3 by 3 또는 그 이상의 window 혹은 mask를 영상 전체에 대해 반복적으로 수행을 하게 되면, 그 mask의 계수 값들의 따라 적정한 결과를 얻을 수 있다.  아래 그림을 보면 왼쪽...