변수와 플레이스 홀더와 Weight 값 세팅하는 것만 배웠는데 무슨 벌써 신경망인가? 하실지 모르겠지만 사실 텐서플로우는 어느정도 익히고, 일반 개발에서 Hello World 찍거나 구구단 짜는 수준이 바로 간단한 신경망을 만드는 것이라 생각해도 된다. 파이썬만 어느정도 다룰 수 있다면, 다음부터는 진도를 쭉쭉 나갈 수 있다. 사실 텐서플로우에서 구현하는 신경망이라고 하는 것이 거의다 잘 짜여진 메소드 호출하고 하는 것인데 우리는 몇개의 Feature(특징)와 몇개의 노드, 그리고 몇개의 Output으로 되어 있는지, 회귀인지 분류인지 등등 정도만 정의하면 텐서플로우가 알아서 다 돌아간다. 그러니 만약에 여기서 텐서플로우 개발자는 대단해라고 생각한다면 그것은 큰 오산이다. 모든 연산을 텐서플로우가 거의다..
자바(Java)를 이용해서, 문자의 숫자, 영문, 한글등을 체크하는 방법은 다양하게 많이 존재한다. index 값을 체크하여 문자를 알아내는 고전적인 방식과 정규표현식을 사용해서 체크하는 방법, 그리고 라이브러리를 사용하여 간단하게 체크하는 방법등 여러가지 방식들이 존재한다. 이 포스팅에서는 3가지의 방식을 사용해보고, 각각의 장단점을 정리해보도록 한다. 1. String Index 기법 일단 고전적인 방법으로는 String index값을 이용해서, 한글자 한글자를 읽은 후 index 값이 무엇인지 확인해서 리턴하는 방식이다. 이 방식은 가장 확실하지만, 소스가 지저분해 보일 수 있다. 그리고, 그만큼 강력하다 Low Level의 메소드를 직접 만드는 방법이기 때문에 부가적인 작업(ex: 형태소 분석)들..
바로 전 포스팅에는 개발자라면 대부분 처음 들어보는 개념의 플레이스 홀더(Placeholder)라는 것을 끄적여 봤습니다. 대부분 변수(Variable)라는 개념을 알고 있는 상황에서 변수와 비슷한데 약간 미묘하게 다른 플레이스 홀더로 인해서 약간 혼란스러울지도 모르겠습니다. 저 역시도 이 부분에 대해서 혼동이 많이 왔었고, 주변의 텐서플로우를 시작한 개발자분들 역시 변수와 플레이스홀더의 차이점을 이해하는데 시간이 좀 걸린 것 같습니다. 사실 그리 어려운 것이 아닌데 헷갈려서 어려운 것이겠죠. 변수는 말그대로 變數(변하는 수)입니다. 즉, 뭔가 값이 계속 변하며 그 값을 계속 세팅한다면 우리는 변수로 이해하면 되고, 파이(3.14)같이 이미 정해져 있는 수는 상수로서 프로그램 언어에 맞게 세팅을 하게 됩..
시퀀스투시퀀스(Sequence to Sequence)는 RNN(Recurrent Neural Network, 순환신경망)을 사용하여 문장을 학습하는 기법입니다. 인공 신경망의 발전으로 인해 발화들의 서열(Sequence)로 이루어진 대화의 말뭉치(Corpus)를 학습하는 것으로도 선행 발화가 후행발화로 변환되는 확률을 계산하여 대화를 생성해 내는 것이 가능해 졌습니다. 기존의 챗봇같은 경우는 문장과 유사성을 LSA(Latent Sementic Analysis), cosine 유사도, Term 기반으로 가장 유사한 문장의 정확도를 채택하여, 해당 문장에 연결된 대화셋을 보여주는 것에서 끝났다면, 시퀀스 투 시퀀스는 새로운 응답을 생성할 수 있는 능력이 있습니다. 한마디로 지능적인 창의적이고 지능적인 대화가..
불쾌한 골짜기(Uncanny Valley)는 인간과 유사한 로봇(Humanoid)을 만들어내는 것이 오히려 비호감을 주는 경우를 말한다. 우리가 로봇을 만들 때, 흔히 생각하는 스타워즈의 R2D2같은 로봇은 애완동물같이 호감을 갖고 있고, 이러한 로봇은 인간에게 해를 끼치지 않을거라 생각하게 된다. 한마디로, 친근한 애완동물같은 느낌으로 로봇에게 접근을 해야 하는데 간혹 너무 사람같이 만들려고 하는 노력이 불쾌함을 주는 경우가 종종 보인다. 사실 불쾌한 골짜기는 시사하는 바가 상당히 많다. 많은 인공지능 개발자, 연구진들은 인간과 똑같이 만들기 위해서 평생을 바치고 연구를 하지만, 과연 그게 옳은 것인가를 생각해봐야 한다. 몇몇 특별한 기능의 로봇(이성로봇, 애인로봇 등)이 아닌이상 굳이 인간과 비슷한 ..
텐서플로우(tensorflow)에는 플레이스홀더(Placeholder)라는 기능이 있습니다. 바로 전 포스팅에서 텐서플로우의 그래프(graph)에 대해서 설명을 드렸는데 텐서플로우는 그래프라는 것을 미리 만들어 놓고, 필요한 시점에 해당 그래프를 실행하는 지연실행(lazy evaluation)이라는 방식을 사용합니다. 이런 내용에 걸맞게 플레이스홀더는 변수의 타입을 미리 설정해놓고 필요한 변수를 나중에 받아서 실행하는 것을 의미합니다. 텐서플로우는 신경망을 구현하기 때문에 신경망과 가장 어울리는 변수 설정이 바로 플레이스 홀더 입니다. 왜 인지 한번 생각해보도록 합시다. 우리가 신경망을 구현하기 위해서는 우선 Input 노드와 Output 노드를 설계합니다. Input 노드는 Feature들이겠고, Ou..
텐서플로우라는 놈은 파이썬에 낑겨서 구동되는 라이브러리라는 것을 바로 전 포스팅에서 설명하였다. 그러면 이 라이브러리가 어떤식으로 돌아가고, 텐서플로우가 파이썬과 어느 차이가 있는지 간단하게 설명해보는 자리를 가지도록 해보자. 텐서플로우는 우선 기본적으로 그래프라는 것을 기반으로 작동을 하게 된다. 이해가 잘 되지 않을것이다. 쌩뚱맞게 그래프라니, 일반 사람들은 그래프라고 하면 수치를 바 형태로 표현하는 것을 이해할 수 있지만 여기서 말하는 그래프는 쉽게 생각해서 신경망 모양을 이해하면 될 것이다. 텐서플로우라는 뜻은 직역하면 텐서의 흐름(Tensor - flow), 즉 데이터의 흐름(Data-flow)과 동일하다. 즉 텐서플로우는 데이터의 흐름을 위해서 만들어진 라이브러리라고 생각하면 된다. 우리 뇌에..
텐서플로우라는 언어만 존재해서, 해당 언어만 딱 사용하면 좋겠지만, 이전에 텐서플로우 포스팅에 적은 것처럼 텐서플로우는 다른 언어에 낑겨서 사용되는 라이브러리(Library) 정도로 이해하면 된다. 독자적인 텐서플로우 언어가 있는 것이 아니라 다른 언어에서 텐서플로우 라이브러리를 호출하는 기능을 제공하는데 모델을 만들기 위해서는 파이썬이 있어야 한다. 사용은 파이썬과 자바 둘다 제공되지만 모델 생성은 파이썬이 필수이다(나중에 자바에서 모델 생성도 제공할지는 모르겠지만) 파이썬(Python) 설치 텐서플로우(Tensorflow)를 사용하기 위해서는 당연히 파이썬이 우선적으로 설치되어 있어야 한다. 파이썬만 설치 해도 되지만, 이왕이면 다량의 패키지를 가지고 있는 아나콘다를 설치하는 것을 권유드린다. 아직 ..
텐서플로우(Tensorflow)란? 우선 인공지능 프로젝트에서 첫번째로 다뤄야 할 것들은 어떤 언어를 사용해서 만들어야 하는가? 이다. 필자의 주언어는 자바(Java)이기 때문에 자바로 딥러닝 라이브러리가 제공되면 좋으련만 딥러닝은 파이썬(Python)에 특화되어 있다. 정확히 말해서, 파이썬이 딥러닝을 다루기 좋은 언어라고 이해하면 된다(자바로 못만드는 것은 아니다) 자바라는 언어가 서비스에 정교하게 특화되어 있다면 파이썬은 시행착오, 데이터 분석 등과 같은 것들에 특화되어 있다. 그렇다 보니, 백엔드(Back-end)에서 무언가를 돌리는 것은 파이선으로 수행하면 프론트엔드(Front-end)단에서는 자바로 처리하는 것이 이상적으로 보인다 http://tensorflow.org 텐서플로우는 구글(Goo..
머신러닝(Machine Learning) 즉, 기계학습이란 컴퓨터가 학습을 통해서, 기계에게 지식을 주입하는 것을 말한다. 우리가 어떠한 사람에게 "우리나라 수도인 서울은 대한민국에서 가장 인구가 많은 도시야"라고 누군가에게 지식을 전달 했을 때, 그 지식을 습득한 당사자는 "한 나라에서 인구가 가장 많은 도시는 수도일 확률이 높겠군"이라고 생각할 수 있다. 즉 이러한 어찌보면 확률을 컴퓨터에게 심어주는 것이 머신러닝이다. 기계학습의 종류는 크게 지도학습과 비지도학습으로 나뉘는데 최근에는 딥러닝으로 인해서 강화학습이 추가되어 3가지로 나뉘는 경우가 많다. 그럼 각각의 학습에 대한 정의는 무엇이고, 어떠한 알고리즘이 있는지 확인해보도록 하자 1. 지도학습(Supervised Learning) 가장 기본이 ..
A.I에서 알고리즘으로 어떤 해답을 탐색한다는 것은 다른 말로 바꿔 말하자면, 문제를 해결(Problem Solving)하는 과정이라고 표현할 수 있다. 다양한 알고리즘들이 문제를 해결하는 방법을 가지고 있다. 어떤 리스트를 소팅(Sorting)해라라고 할 때 하나의 알고리즘만으로 소팅하지 않는다. 데이터의 구조 및 상황에 따라서 적절한 알고리즘을 선택하여 정렬을 수행하는데 A.I 역시 하나의 방법으로만 탐색(즉, 해답을 찾는..)을 하지는 않는다. 탐색 알고리즘 중에 상태 공간 탐색이라는 방법(혹은 알고리즘)이 있는데 이 방식은 제목에서 알다시피 상태 공간을 이용한 탐색방법이다. 상태 공간 탐색은 여러가지 대표적으로 잘 알려진 문제를 해결할 수 있는데 대표적으로 "퍼즐", "틱택토(tic-tac-toe..
통계학은 이미 많은 범위에서 적용이 되고 있다. 마케팅, 추천, 경영 등등 안쓰이는 것이 없을 정도로 통계는 실생활에 가장 밀접히 다가간 수학적인 학문이 아닐까 싶다. 요즘 R툴이 범용적으로 쓰이고 있고, 회사에서도 데이터분석에 많은 관심을 갖다보니 회의때 통계에 관련된 용어가 심심치 않게 나오는 것을 볼 수 있을 것이다. 통계를 모르면, 회의때 왕따를 당하는 것 같은 소외감이 느껴지기도 할텐데 최소한 이런 소외감을 당하지 않기 위해서는 어느정도의 통계에 관련된 용어는 알아야 될 것이다. 물론 중고등학교때 통계에 대해서 배우지만, 사실 시간이 오래지나서 헷갈리기도 하고 안배웠던 분들도 분명 있을 것이다. 지금 설명하는 통계 용어는 통계를 알기 위해서 최소한에 이해해야 할 지식이다. 모집단(母集團, pop..