'분류 전체보기'에 해당되는 글 59건

  1. 2016.01.26 Python Introduction
  2. 2016.01.24 인공지능이 낳은 신규 사업
  3. 2016.01.24 차근차근 확장되는 인공지능의 영향
  4. 2016.01.24 딥러닝과 산업효과
  5. 2016.01.22 딥러닝에서의 기술발전
  6. 2016.01.22 딥러닝 다계층
  7. 2016.01.22 딥러닝
  8. 2016.01.21 뉴럴 네트워크
  9. 2016.01.21 기계 학습
  10. 2016.01.21 인공지능 발전 역사

https://www.youtube.com/watch?v=tKTZoB2Vjuk


Google Python Class Day 1 Part 1 동영상 강의


파이썬 이란

Python Introduction

Prelude

Welcome to Google's Python online tutorial. It is based on the introductory Python course offered internally. Originally created during the Python 2.4 days, we've tried to keep the content universal and exercises relevant, even for newer releases. As mentioned on the setup page, this material covers Python 2. While we recommend "avoiding" Python 3 for now, recognize that it is the future, as all new features are only going there. The good news is that developers learning either version can pick up the other without too much difficulty. If you want to know more about choosing Python 2 vs. 3, check out this post.

We strongly recommend you follow along with the companion videos throughout the course, starting with the first one. If you're seeking a companion MOOC course, try the ones from Udacity and Coursera (intro to programming [beginners] or intro to Python), and if you're looking for a companion book to your learning, regardless of your Python skill level, check out these reading lists. Finally, if you're seeking self-paced online learning without watching videos, try the ones listed towards the end of this post — each feature learning content as well as a Python interactive interpreter you can practice with. What's this "interpreter" we mention? You'll find out in the next section!

Language Introduction

Python is a dynamic, interpreted (bytecode-compiled) language. There are no type declarations of variables, parameters, functions, or methods in source code. This makes the code short and flexible, and you lose the compile-time type checking of the source code. Python tracks the types of all values at runtime and flags code that does not make sense as it runs.

An excellent way to see how Python code works is to run the Python interpreter and type code right into it. If you ever have a question like, "What happens if I add an int to a list?" Just typing it into the Python interpreter is a fast and likely the best way to see what happens. (See below to see what really happens!)

$ python        ## Run the Python interpreter
Python 2.7.9 (default, Dec 30 2014, 03:41:42)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-55)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 6       ## set a variable in this interpreter session
>>> a           ## entering an expression prints its value
6
>>> a + 2
8
>>> a = 'hi'    ## 'a' can hold a string just as well
>>> a
'hi'
>>> len(a)      ## call the len() function on a string
2
>>> a + len(a)  ## try something that doesn't work
Traceback (most recent call last):
 
File "", line 1, in
TypeError: cannot concatenate 'str' and 'int' objects
>>> a + str(len(a))  ## probably what you really wanted
'hi2'
>>> foo         ## try something else that doesn't work
Traceback (most recent call last):
 
File "", line 1, in
NameError: name 'foo' is not defined
>>> ^D          ## type CTRL-d to exit (CTRL-z in Windows/DOS terminal)

As you can see above, it's easy to experiment with variables and operators. Also, the interpreter throws, or "raises" in Python parlance, a runtime error if the code tries to read a variable that has not been assigned a value. Like C++ and Java, Python is case sensitive so "a" and "A" are different variables. The end of a line marks the end of a statement, so unlike C++ and Java, Python does not require a semicolon at the end of each statement. Comments begin with a '#' and extend to the end of the line.

Python source code

Python source files use the ".py" extension and are called "modules." With a Python modulehello.py, the easiest way to run it is with the shell command "python hello.py Alice" which calls the Python interpreter to execute the code in hello.py, passing it the command line argument "Alice". See the official docs page on all the different options you have when running Python from the command-line.

Here's a very simple hello.py program (notice that blocks of code are delimited strictly using indentation rather than curly braces — more on this later!):

#!/usr/bin/env python

# import modules used here -- sys is a very standard one
import sys

# Gather our code in a main() function
def main():
   
print 'Hello there', sys.argv[1]
   
# Command line args are in sys.argv[1], sys.argv[2] ...
   
# sys.argv[0] is the script name itself and can be ignored

# Standard boilerplate to call the main() function to begin
# the program.
if __name__ == '__main__':
    main
()

Running this program from the command line looks like:

$ python hello.py Guido
Hello there Guido
$ ./hello.py Alice  ## without needing 'python' first (Unix)
Hello there Alice

Imports, Command-line arguments, and len()

The outermost statements in a Python file, or "module", do its one-time setup — those statements run from top to bottom the first time the module is imported somewhere, setting up its variables and functions. A Python module can be run directly — as above "python hello.py Bob" — or it can be imported and used by some other module. When a Python file is run directly, the special variable "__name__" is set to "__main__". Therefore, it's common to have the boilerplate if __name__ ==... shown above to call a main() function when the module is run directly, but not when the module is imported by some other module.

In a standard Python program, the list sys.argv contains the command-line arguments in the standard way with sys.argv[0] being the program itself, sys.argv[1] the first argument, and so on. If you know about argc, or the number of arguments, you can simply request this value from Python with len(sys.argv), just like we did in the interactive interpreter code above when requesting the length of a string. In general, len() can tell you how long a string is, the number of elements in lists and tuples (another array-like data structure), and the number of key-value pairs in a dictionary.

User-defined Functions

Functions in Python are defined like this:

# Defines a "repeat" function that takes 2 arguments.
def repeat(s, exclaim):
   
"""
    Returns the string 's' repeated 3 times.
    If exclaim is true, add exclamation marks.
    """


    result
= s + s + s # can also use "s * 3" which is faster (Why?)
   
if exclaim:
        result
= result + '!!!'
   
return result

Notice also how the lines that make up the function or if-statement are grouped by all having the same level of indentation. We also presented 2 different ways to repeat strings, using the + operator which is more user-friendly, but * also works because it's Python's "repeat" operator, meaning that '-' * 10 gives '----------', a neat way to create an onscreen "line." In the code comment, we hinted that * works faster than +, the reason being that * calculates the size of the resulting object once whereas with +, that calculation is made each time + is called. Both + and * are called "overloaded" operators because they mean different things for numbers vs. for strings (and other data types).

The def keyword defines the function with its parameters within parentheses and its code indented. The first line of a function can be a documentation string ("docstring") that describes what the function does. The docstring can be a single line, or a multi-line description as in the example above. (Yes, those are "triple quotes," a feature unique to Python!) Variables defined in the function are local to that function, so the "result" in the above function is separate from a "result" variable in another function. The return statement can take an argument, in which case that is the value returned to the caller.

Here is code that calls the above repeat() function, printing what it returns:

def main():
   
print repeat('Yay', False)      ## YayYayYay
   
print repeat('Woo Hoo', True)   ## Woo HooWoo HooWoo Hoo!!!

At run time, functions must be defined by the execution of a "def" before they are called. It's typical to def a main() function towards the bottom of the file with the functions it calls above it.

Indentation

One unusual Python feature is that the whitespace indentation of a piece of code affects its meaning. A logical block of statements such as the ones that make up a function should all have the same indentation, set in from the indentation of their parent function or "if" or whatever. If one of the lines in a group has a different indentation, it is flagged as a syntax error.

Python's use of whitespace feels a little strange at first, but it's logical and I found I got used to it very quickly. Avoid using TABs as they greatly complicate the indentation scheme (not to mention TABs may mean different things on different platforms). Set your editor to insert spaces instead of TABs for Python code.

A common question beginners ask is, "How many spaces should I indent?" According to the official Python style guide (PEP 8), you should indent with 4 spaces. (Fun fact: Google's internal style guideline dictates indenting by 2 spaces!)

Code Checked at Runtime

Python does very little checking at compile time, deferring almost all type, name, etc. checks on each line until that line runs. Suppose the above main() calls repeat() like this:

def main():
   
if name == 'Guido':
       
print repeeeet(name) + '!!!'
   
else:
       
print repeat(name)

The if-statement contains an obvious error, where the repeat() function is accidentally typed in as repeeeet(). The funny thing in Python ... this code compiles and runs fine so long as the name at runtime is not 'Guido'. Only when a run actually tries to execute the repeeeet() will it notice that there is no such function and raise an error. This just means that when you first run a Python program, some of the first errors you see will be simple typos like this. This is one area where languages with a more verbose type system, like Java, have an advantage ... they can catch such errors at compile time (but of course you have to maintain all that type information ... it's a tradeoff).

Variable Names

Since Python variables don't have any type spelled out in the source code, it's extra helpful to give meaningful names to your variables to remind yourself of what's going on. So use "name" if it's a single name, and "names" if it's a list of names, and "tuples" if it's a list of tuples. Many basic Python errors result from forgetting what type of value is in each variable, so use your variable names (all you have really) to help keep things straight.

As far as actual naming goes, some languages prefer underscored_parts for variable names made up of "more than one word," but other languages prefer camelCasing. In general, Python prefers the underscore method but guides developers to defer to camelCasing if integrating into existing Python code that already uses that style. Readability counts. Read more in the section on naming conventions in PEP 8.

As you can guess, keywords like 'print' and 'while' cannot be used as variable names — you'll get a syntax error if you do. However, be careful not to use built-ins as variable names. For example, while 'str' and 'list' may seem like good names, you'd be overriding those system variables. Built-ins are not keywords and thus, are susceptible to inadvertent use by new Python developers.

More on Modules and their Namespaces

Suppose you've got a module "binky.py" which contains a "def foo()". The fully qualified name of that foo function is "binky.foo". In this way, various Python modules can name their functions and variables whatever they want, and the variable names won't conflict — module1.foo is different from module2.foo. In the Python vocabulary, we'd say that binky, module1, and module2 each have their own "namespaces," which as you can guess are variable name-to-object bindings.

For example, we have the standard "sys" module that contains some standard system facilities, like the argv list, and exit() function. With the statement "import sys" you can can then access the definitions in the sys module and makes them available by their fully-qualified name, e.g. sys.exit(). (Yes, 'sys' has a namespace too!)

  import sys

 
# Now can refer to sys.xxx facilities
  sys
.exit(0)

There is another import form that looks like this: "from sys import argv, exit". That makes argv and exit() available by their short names; however, we recommend the original form with the fully-qualified names because it's a lot easier to determine where a function or attribute came from.

There are many modules and packages which are bundled with a standard installation of the Python interpreter, so you don't have do anything extra to use them. These are collectively known as the "Python Standard Library." Commonly used modules/packages include:

  • sys — access to exit(), argv, stdin, stdout, ...
  • re — regular expressions
  • os — operating system interface, file system

You can find the documentation of all the Standard Library modules and packages athttp://docs.python.org/library.

Online help, help(), and dir()

There are a variety ways to get help for Python.

  • Do a Google search, starting with the word "python", like "python list" or "python string lowercase". The first hit is often the answer. This technique seems to work better for Python than it does for other languages for some reason.
  • The official Python docs site — docs.python.org — has high quality docs. Nonetheless, I often find a Google search of a couple words to be quicker.
  • There is also an official Tutor mailing list specifically designed for those who are new to Python and/or programming!
  • Many questions (and answers) can be found on StackOverflow and Quora.
  • Use the help() and dir() functions (see below).

Inside the Python interpreter, the help() function pulls up documentation strings for various modules, functions, and methods. These doc strings are similar to Java's javadoc. The dir() function tells you what the attributes of an object are. Below are some ways to call help() and dir() from the interpreter:

  • help(len) — help string for the built-in len() function; note that it's "len" not "len()", which is a call to the function, which we don't want
  • help(sys) — help string for the sys module (must do an import sys first)
  • dir(sys) — dir() is like help() but just gives a quick list of its defined symbols, or "attributes"
  • help(sys.exit) — help string for the exit() function in the sys module
  • help('xyz'.split) — help string for the split() method for string objects. You can callhelp() with that object itself or an example of that object, plus its attribute. For example, calling help('xyz'.split) is the same as calling help(str.split).
  • help(list) — help string for list objects
  • dir(list) — displays list object attributes, including its methods
  • help(list.append) — help string for the append() method for list objects


Posted by MIDDLE
,

지금까지의이야기는 인공지능, 특히 특징표현 학습에 기인한 기술의 발전을 기초로 생각한 5년에서 20년정도의 기간의 사회변화에 대해서였다. 그렇다면 인공지능을 통해 앞으로 새로운 사업을 만들어 낼 수는 없는것일까?

표는 미국불룸버그 애널리스트가 최근 세계의인공지능벤처를 정리한 자료이다. 약 2000개 회사를 조사해서 만든자료인데 이것을보면 인공지능에 관한 새로운 사업의 시도가 다양한영역으로 확대되어 가고있는것을알 수 있다.

서두에서 다룬바와 같이 현재 인공지능은 붐의 시대를 맞이하고 붐이 되고 있다. 인공지능과 관련된 사업은 미국에서도 아주빠르게 늘어나고 있지만, 필자가 나름대로 검토한 결과 급격하게성장하는 사업은 똑바로 일어서지 않을지도 몰라서 신중한편이 좋다.


코어 테크놀로지는 기계학습자체를 제공하는 비즈니스이다. 이미지 인식과 음성인식은 특징표현 학습이 가장 앞서 진행되고 있는 기술 분야이므로 그2개의 분야도 거론되고 있다. 툴이나 API 의 형태로 제공되는것이 많다. 하지만 비즈니스 확대로는 어려울지도 모른다. 왜냐하면 기계학습의 알고리즘은 학술커뮤니티가 앞서고 있어서 기업이 그규범을 뒤집어 고유한 기계학습의 기술을 실용화 하고 강한 경쟁력을 가진다는것은 생각하기 어렵고, 그것을 툴로써 제공한 곳에서 사용할 수 있는 기업도 많지 않다. 또 인재를 획득하려 해도 이미 높은 수준의 기계학습의 지식이나 기능을 가진 연구자와 기술자의몸값은 급등하고 있다. 


두번째표는 기업내의 활동을 한번더생각하자 라는 사업으로 영업, 보안, 인사, 마케팅등이 나열되어 있다. 이미 많은 기업이 참여하고 있는중이며 그들 기업이 조금씩 인공지능을 사용한 제품을 제공해가는 형태로 진화해 갈것이다.


세번째표는 각 산업을 한번더 생각하자이다. 많은 산업분야에서 조금씩 빅데이터 활용이 진행된 후 인공지능의 활용도 시작될 것이다. 그러나 인공지능의 활용 그자체가 경쟁에서 결정적 우위에연결되는 일은 적고 고객에 제공하는 제공 하는 상품 서비스의 부가가치 구축, 조직의 구축, 거래처와의 관계 구출, 사업의 오퍼레이션 효율화 같은 요소가 중요한 포인트를 차지하는 것에는 변함이 없을 것이다. 예를들어 인공지능을 사용하면, 고객 대응할때 고객 한사람 한사람 따라서 섬세하고 치밀하게 바꾸어 가는것도 가능하지만, 이러한 변화는 정보시스템 혹은 데이터 분석시스템을 제공하는 기업이 서서히 인공지능을 이용한 서비스를 제공함으로 실현된다고 생각한다. 혹은 정보 시스템보다도 더 경영에 가까운 곳에서 빅데이터의 분석, 그위에 인공지능과 발전해나가는 컨설팅 비즈니스도 충분히 있을수있다.


네번째로 인간과 인간 인간과 기계의 상호작용을 생각하자라는 그룹이다. 


다섯번째는 인고지능을 보조하는 기술로는 예를들면 데이터의 사전처리를 하는 기술제공, 데이터를 모으는 기술 제공등으로 이른바 골드러시 시대에 청바지를파는것과 같은 기술이다. 이중에서 우릭 가장이해하기 쉽고 변화가 급속도로 일어나는 분야는 바로 각 산업을 한번더 생각하자이다. 그룹안의 이료 법무 재무일것이다.

전문가를 대체하는 경제적인 장점이 많고 많은 사람이 그 서비스를 잠재적으로 필요로 하고 있기 때문이다. 각각의 전문 분야에 대해서 대답해주는 IBM의 왓슨과 같은 시스템이 완성도 높은 형태로 마켓에 투입되면 단숨에 실용단계로 오를 가능성이 있다. 그때는 기존의 업계구조를 크게 변화시켜버릴지도 모른다.




지식의 전이 사진 올리기




'Artificial Intelligence > Deep Learning' 카테고리의 다른 글

유용한 사이트  (0) 2016.04.11
인공지능 신경망  (0) 2016.02.24
차근차근 확장되는 인공지능의 영향  (0) 2016.01.24
딥러닝과 산업효과  (0) 2016.01.24
딥러닝에서의 기술발전  (0) 2016.01.22
Posted by MIDDLE
,

물론 이러한 변화가 하루아침에 일어나는 것은 아닌다. 먼저 연구개발이 선행되고 처음에는 어떤일이 가능하게 되었다는 뉴스가 세상에 퍼지고, 이어서 조금 늦게 비즈니스로 전개되는 것이다.

예를 들어 인공지능에 의한 방범과 가미로 카메라에 비치는 개인을 식별할 수 있게 될지도 모른다. 이미 일부는 실현되고 있지만 방범은 사회적인 의견일치를 보기쉬우므로 먼저 기업이 그것을 도입하고, 학교도 도입하는 형태로 방범카메라에 의한감시 네트워크가 완성되어 갈가능성은 충분히 있다. 이러한 감시 네트워크와 과거 범죄 이력의 데이터베이스가 세트가 되면 범죄예방도 될것이고, 범죄가 일어났을때 범인 체포와 연결될 수 있는 정보를 가져올 가능성이 높아지며 치안도 좋아 질것이다.

하지만 편리성이 늘어나는 반면에 작정하면 얼마든지 개인의 행동이력을 더듬에 찾아낼수있기 때문에 프라이버시와의 균형문제도 생길것이다.



'Artificial Intelligence > Deep Learning' 카테고리의 다른 글

인공지능 신경망  (0) 2016.02.24
인공지능이 낳은 신규 사업  (0) 2016.01.24
딥러닝과 산업효과  (0) 2016.01.24
딥러닝에서의 기술발전  (0) 2016.01.22
딥러닝 다계층  (0) 2016.01.22
Posted by MIDDLE
,

산업에 미치는 파급 효과

제 3차 AI붐을 맞이하는 인공지능은 앞으로 우리들의 생활에어떤 영향을 초래하게 될 것인가?

다음 페이지의 그림은 딥러닝 이후의 인공지능 발달과 그로인해 영향받는 산업을 정리한 미래 예상도이다. 그림에서 1부터 6은 전 글에 실려있다.

주의 해야할것은 시간축이다. 기술의 진전은 산업에서 응용하거나 사회에서 실제로 사용될 때까지 상당한 시간이 걸리는 경우도 있다. 어디까지나 이정도의 스피드로 진행되어도 이상하지 않을 것이다. 라는 의미로 시간축을 적용시켜 본 것이다. 지금까지 인공지능의 기술에 관한 예상이 어느시대에서나 빗나갔고, 지나치게 빨리 잡아 맞지 않았던적도 있었다는 것을 명심하자.


기술의 발전과 사회에 미치는 영향 그림 올리기


1. 광고, 이미지 진단, 인터넷 기업

딥러닝으로 인해 화상인식의 정밀도가 향상하면서 종래의 미디어에 적합한 획일적인 광고로부터 개인의 취미와 기호에 따른 타켓팅 광고가 일반화 될것이다. 또 X-레이나 CT등 이미지를 바탕으로한 진단을 자동으로 내릴 수 있게된다.

더욱이 기계학습을 활용하고 있는 검색, 소셜 네트워크등의 인터넷 업계가 가장 먼저 영향을 받는다. 실제로 지금 현재 우리들이 경험하고 있는것이다.


2.퍼스널 로봇, 방법(경비 회사+ 경찰) , 빅데이터 활용기업

앞으로 수년안에 음성이나 감촉등 멀티모달한 인신 정밀도가 극적으로 향상할 것이라고 예상된다. 그렇게 되면 소프트뱅크가 2014년에 발표한사람형 로봇 페퍼와 같이 인간의 감정을 인식해서 정형된 커뮤니케이션을 하거나, 점포내에서 손님을 접대하는 로봇이 보급될 가능성도 있다.

또 동영상 인식의 정밀도가 향상되면서 양질의 방범 카메라가 장착된 방법 시스템의 구축으로 범죄 검거율이 향살될지도 모른다. 다양한 빅데이터의 특성에 맞추고 특징이 잘생성되는것도 이 단계이다. 따라서 최근 빅데이터 활용을 진척시키고 있는 각 기업이 더욱 경쟁력을 확대해 갈 것이다.


3. 자동차 메이커, 교통, 물류, 농업

주위를 관찰하는 것뿐이었던 인공지능이 자신의 행위 결과가 주위에 어떤 영향을미칠지 인식할 수 있게 되면 로봇의 계획의 정밀도가 오르게된다. 예를 들면 현재 구글이앞서서 테스트를 되풀이 하고있는 자율주행 기술이 실용화 되면 상품을 소비자에게 보내는 라스트 1마일(물류센터와 소비자를 맺는 최후의 구간)은 어쩌면 무인 헬리콥터의 드론이 짊어지고 있을지도 모른다.

농업의 자동화를 비롯해서 주로 신체를 움직이는 노동분야에서 인간 대신 일하는 로봇이 보급되는 것도 이쯤일것이다. 인간 대신 일하는 로봇이 보급되는 것도 이때쯤일 것이다. 인간이 어떠한 판단을 담당하고 컨트롤하는 분야이다.

기존의 제1차 AI붐으로 인해 실행된 계획이 아니고 특징표현 학습이 갖추어진 계획에서는 다양한 환경에서 범용적으로 사용가능한 환경의 변화에도 대응할 수 있는 예외에 강한 등등의 특징이 있을것이다.


4. 가사, 의료.간병, 접수.콜 센터

행동에 근거하는 추상화가 가능하게되면 어떤 일이 벌어질까?

예를 들어 로봇이 인간은 손을 강하게 쥐면 아픔을 느낀다 라는것을 이해하고 아프지 않도록 손을 잡거나, 상처를 입히지 않도록 하는 등 인간밖에 할 수 없었던 섬세한 행동을 할 수 있게 된다. 그 결과 물류나 농업등 지금까지 물건만을 대상으로 해온 로봇의 활동 범위가 대인적인 서비스로 넓어질 수 있다. 예를 들면 가사, 의료.간병등의 분야로 진출 할 수 있다. 또, 어떤 표현을 하면 상대가 기뻐 한다는 것을 알게되면 감정을 컨트롤하는 대응도 할 수 있게 된다. 그렇게 되면 인공지능이 접수나 콜 센터 업무를 하는 것도 가능해질지 모른다.


5. 통역. 번역, 글로벌화

인류가 가지고 있는 개념의 상당한부분을 획득한 인공지능은 각각의 개념에어울리는 언어를 할당하면서 그 언어를 이해하게 된다. 시리와 같은 음성대화 시스템도 인간이 준비한 기술에 근거해서 대답하는 것이 아니고 인공지능이 외부세계를 시뮬레이트 하면서 생각한 후 대답할 수 있게된다.

동시에 기계번역도 실용적인 수준에 도달하기 위해서 번역이나 외국어 학습이라는 행위 그자체가 없어질지도 모른다. 자신이 이야기 한것, 쓴것이 순차적으로 영어와 중국어로 번역된다면 일부러 시간을 들여서 외국어를 배울 필요가 없어질 것이다. 언어의 벽이 사라지면 더욱 수준이 높은 비즈니스 글로벌화가 진행 될것이다. 예를 들어 현재 국내 대상으로 물품을 판매하고 있는 EC사이트의 해외진출이 당연해질 수있다.


6. 교육, 비서, 화이트 칼라 지원

인간의 언어를 이해하게 되면 인류가 과거에축적해온 지식을 인공지능에 흡수 시킬수 있다. 그결과 인공지능의 활동범위가 인간의 지적 노동 분야로 확대될것이다. 교육분야 에서도 초등교육이나 수험등 정해진 단계외에 필요에따라 인공지능이 지식을 익힌후 가르쳐주는것도 가능할 수 있다 또 임기 응변 상황을판단하고 필요할때에는 학습해서 대응하는 비서 업무나 화이트칼라 전반의 지원도 가능하다. 2030년 이후에는 이러한 일들이 실현될수도있다.



'Artificial Intelligence > Deep Learning' 카테고리의 다른 글

인공지능이 낳은 신규 사업  (0) 2016.01.24
차근차근 확장되는 인공지능의 영향  (0) 2016.01.24
딥러닝에서의 기술발전  (0) 2016.01.22
딥러닝 다계층  (0) 2016.01.22
딥러닝  (0) 2016.01.22
Posted by MIDDLE
,

1. 이미지 특징의 추상화가 가능한 AI -> 2. 멀티 모달한 추상화 가능한 AI

이미지를보고 특징을 추출해서 분별한다는 것은 인간의 시각에 가깝지만 인간은청각이나 촉각과 같은 감각기도 가지고있다. 예를들면 소리에는색이나형태가 없듯이 본래 시각과 청각은 데이터의 종류가 완전히 다른것이다. 뇌가 재미있는것은 이러한 데이터의 종류에 의존하지 않고 같은 처리 기구에서 처리가 이뤄지고 있다는 점이다. 딥러닝에서도 동일하게 다양한데이터에 대하여 같은 방법을 적용할 수 있을 것이다. (혹은 그렇게 개량될 필요가있다.)

그경우에 큰것은 먼저 시간을 다루는것, 즉 이미지로 말하면 동영상이다. 동영상으로도 한장 한장의 플립북같은이미지에낱개 처리로 할수있지만 그것은 본질적인 방식이 아니다. 시간을 두고 대국적인 문맥을 이해할 필요가 있고, 특히 시간의 취급은 의외로 어렵다. 그리고 시각뿐만 아니라 음성이나 촉가등 이미지 이외의 정보를 받아들이는 것으로 멀티 모달한 추상화가 가능하게 될것이다.

예를 들면 만지는 감각이라는것은 압력센서의 시계열 변화이다. 인간이 고양이의 움직임, 울음소리, 닿는 느낌등 다양한 정보를 조합시켜서 고양이라고 인식하는것을 컴퓨터가 처리할 수 있도록 해야 한다.


3. 행동과 결과가의 추상화가 가능한 AI

다음에 필요한 것은 컴퓨터 스스로 행위와 그결과를 합쳐서 추상화 하는것이다. 인간의 뇌에서 보면 자기 자신의 신체가 움직이고 그결과 무엇인가 눈에 들어오는 것에 변화가 일어나지만 뇌의 일부에서 들어오는 데이터라는의미에서는 동일하다. 그런데 인간은 생물이므로 자신이 명령을 내렸기 때문에 신체가 움지깅고, 그것에 의해서 눈으로 보이는것이 변화 되었다라는 데이터가 들어오는것인지, 그렇지 않으면 신체는 움직이지 않는데 눈으로 보이는 것이 바뀐것인지 구별할 필요가 있다. 즉 문을 열었기 때문에 문이 열린것인지, 제멋대로 문이 열린것인지는 인간의 생존에 있어서 대단히 중요한 차이다. 어딘가에 적이 숨어있을지 모르기 때문이다.

인간은 자신을 둘러싼 환경에서 다양한 정보를 읽어내고 있지만, 단지 가만히 앉아서 관찰을 계속하는것이 아니다. 아기때 물건을 움켜쥐거나 장래를 약속하거나 여러가지 일을 하고이다. 그안에서 물건을 움직인다. 물건을 누른다라는 개념을 획득해간다.

이렇게해서 자신의 행동과 결과를 세트로 추상화시키는 것의 메리트는 먼저 의자를 움직이고, 그위에서 올라가고, 높은곳에 있는 바나나를 가져가자라는것과 행동 계획이 세워지는것이다.

1과 2에서는 인공지능이 외부세계에 있는것을 관찰하고 있을뿐이었다. 3에서는 자신도 그안에 억지로 들어가고 외부세계와 상호작용을하면서 관계성을 배우게 된다. 이단계에서 네비게이션이나 외부세계의 시뮬레이션혹은 보다 일화 한것으로 사고라는 프로세스가 필요하게 될것이다.


4.행동을 통한 특징을 획드하는 AI

계속해서 그러한 행동을 할 수 있게 되면행동한결과에 대해서도 추상화가 진행된다. 사실 외부세계와의 상호갖ㄱ요에 의한 동작개념 획득은 새로운 특징을 꺼내는데 있어서 중요하다. 

과거부터 필자가 사용하는 예가 있는데, 소수인가 아닌가 라는 특징을 어떻게 획득하면 좋을까라는 문제가 있다. 2는 소수, 3도 소수, 4는 소수가 아님, 5는 소수이다. 예를 들어 퍼즐게임으로 주인공이 가지는 아이템의 수가 소수라면 적을 쓰러뜨릴수 있거, 소수가 아니면 쓰러뜨릴수 없다는 상황이 있을때 아이템의 수가 소수일것인가 아닌가라는 특징을 만들수 있으면 이문제는 풀기 쉬워진다.

수학문제하면서 쉬운지 어려운지, 장기판을 보고 형세가 좋은지 나쁜지는 자신이 동작해본 결과에 반해서 자체 자신의 성질을 취하게 된다. 이러한 형용사적인 개념은 몇번을 해본뒤에야 획득가능한 추상적인 개념이다. 깨지기쉬운 컵이라고 하면 누르면 깨진다, 떨어뜨리면 같은 결과가 나올것이란것을 추상가능하다.

컴퓨터는 3. 의 학습을 진행할때 그러한 추상적인 개념도 배우게 된다. 한 묶음의 동작이 사물의 새로운 특징을 끌어내는데, 인간으로 말하면 '생각을 한후, 앗 하고 깨닫는다' 또는 하다보면 요령을 안다라는것과 같은 일이 발생한다.

일단 동작을 통한 특징을 얻을수 잇따면 다음부터는 본순간 깨지기 쉬운컵이기에 주의해서 취급하고, 부드러운 소파이기에 앉으면 어느정도 신체가 가라앉을것을 예측한다.


5. 언어이해. 자동번역이 가능한 AI
지금까지 살펴본 내용에서 우리들이 일상적으로 사용하는 개념은 거의 나왔다. 물론 이러한 인공지능이 존재하는 환경에서 가능하다. 인간정도의 신체를 가진 인공지능이라면 인간이만들어 내는 개념에 어느정도 가까운 것을 획득할 수 있을것이다. 그결과 컴퓨터는 스스로 언어를 획득하는 준비가 정돈된다. 먼저 개념을 획득할 수 있으면 뒤에 말을 결부시키는 것은 간단하기 때문이다. 고양이, 야옹하고 운다, 부드럽다 개념은 이미 각각되어 있기때문에 여기에 고양이 야옹하고운다. 부드럽다 결부시키면 그말과 그것이 의미하는 개념을 세트로 이해한다. 여기에서는 개념을 말과 결부시킬수 있는것이 중요하기때문에 그 말이 단어가 몇개인지는 문제되지않는다. 즉 어떤 개념에 영어 결부시키는것도, 일본어, 한국어 하는것도 노동력에서는 변함이 없다. 컴퓨터로 번역하는것이 생활에 충분히 활용되려면 이단계가 지나야한다. 기계번역이라는것은 친근한만큼이나 간단한 기술로 생각될지도 모르지만 상당히고도의 기술이다.


6. 지식획득이 가능한 AI
컴퓨터가 인간의 말을 이해할 수 있게 된다는 것은 컴퓨터안에 어떠한 시뮬레이터가 준비됭 인간의 문장을 읽으면 거기에 어떠한 정경을 재현할 수 있다는 것을 의미한다. 그렇게되면 컴퓨터도 책을 읽을수 있게된다, 다양한 소설을 읽은후 망원경으로 들여다보는것은 대체로 남자들이 많다는 것을 이해할지도 모른다. 또 위키피디아를 비롯한 방대한 웹정보도 읽을수 있게된다. 그정도에이르면 컴퓨터는 빠른기세로 지식을 습득할것이다. 


예전에는 인공지능에대한 벽이 느껴졌고 특징표현을 어떻게획득할까라는것이 최대관문이었고, 그산을 넘을수가 없었다. 그런데 지금 빅데이터와 기계학습사이에 작은길(딥러닝)인데이고을 빠져나가면 정말 비옥한 세계가 펼쳐질것이다. 그러나 인공지능이 긴정체의 시간을 넘어서 비로소 움직인것이다.

'Artificial Intelligence > Deep Learning' 카테고리의 다른 글

차근차근 확장되는 인공지능의 영향  (0) 2016.01.24
딥러닝과 산업효과  (0) 2016.01.24
딥러닝 다계층  (0) 2016.01.22
딥러닝  (0) 2016.01.22
뉴럴 네트워크  (0) 2016.01.21
Posted by MIDDLE
,

출력과 입력을 될 수 있는한 가깝게 하기 위해서는 어떻게 하면 좋을까? 이에대한 답은 정보량을 사용하면 된다. 예를들어 어떤 화소가 흑일때 옆의 화소도 반드시 흑이라면 그 2개의 화소는 합쳐서 취급해버리면된다. 즉 2개의 화소를 따로따로 숫자로써 은닉층에 건네주는것이 아니고 그 2개의 숫자가 합쳐져서 흑인지 백인지를 은닉층에 건네주면 되는 것이다. 간토우 지방의 날씨는 비슷하기 때문에 하나로 정리해서 취급하라는것과 같다.


여기에서 어디를 합치면 결과에 영향을 주지 않을것인지, 반대로 어디를 취급하면 크게 다른 결과가 나올것인지, 컴퓨터는 압축포인트를 오차역전파를 통해 스스로 학습하게 된다. 즉 복원에러가 최소가 되는 적절한 특징표현을 발견하는것이다.


수학이나 통계에 익숙한 오토인코더를 할때에는 앙케이트 분석 등으로 익숙한 주성분 분석과 같다고 보면된다.

주성분 분석이란 많은 변수를 가장 큰분산을 나타내는 주성분을 축으로 압축하는 방법으로 마케팅 분야에서 자주 사용된다. 실제로 오토인코더에 선형 가중치를 이용하고 최소 자승오차를 복원에러의 함수로 하면 주성분 분석과 일치하는 결과를 얻을 수 있다.


오토인코더의 경우에는 다양한 형태로 노이즈를 주고 그것을 통해 아주 신뢰도 높은 주성분을 꺼낼 수 있다. 이것이 딥, 즉 다계층으로 하는것을 가능하게 하고 그결과 주성분 분석에서는 꺼낼수 없는 높은 차원인 특징을 꺼낼수 있다.


딥러닝에서는 위와같은 작업을 한단한단 포개 간다. 첫 번째 단의 은닉층을 두번째 단의 입력으로 컴퓨터가 컴퓨터에 학습시키는것이다. (end-to-end learning 이라고 부른다.)


계층 포개어 탐구하다. 이미지 올리기

'Artificial Intelligence > Deep Learning' 카테고리의 다른 글

딥러닝과 산업효과  (0) 2016.01.24
딥러닝에서의 기술발전  (0) 2016.01.22
딥러닝  (0) 2016.01.22
뉴럴 네트워크  (0) 2016.01.21
기계 학습  (0) 2016.01.21
Posted by MIDDLE
,

2012년 세계적인 인식 컴피티션 대회에서 처음 출전한 토론토 대학에서 압도적인 점수로 우승하게 되었다.

이것은 오랜 세월 이미지 인식 연구를 진행시켜온 다른 연구자들을 혼란스럽게하였다.

그승리의 원인은 대학교수 제프리 힌톤이 중심이 되어서 개발한 새로운 기계학습 방법 딥러닝(심층 학습)이었다.

딥러닝의 연구자체는 2006년부터 시작되었지만, 그때까지 이미지 인식의 연구자들이 각자가 쌓아온 노하우와 전혀 다른 방식으로 접근하였고, 갑작스럽게 정상에 오른것이라서 충격이었다.

딥러닝이란 데이터를 바탕으로 컴퓨터가 스스로 특징을 만들어 낸다. 인간이 특징을 설계하는것이 아니고 컴퓨터가 스스로 높은 차원인 특징을 획득하고, 그것을 바탕으로 이미지를 분류할 수 있게 된다. 딥러닝으로 인해 지금까지 인간이 관여해야만 했던 영역에 인공지능이 깊이 파고들 수 있게된 것이다.


딥러닝을 인공지능 연구에있어서 50년간의 혁신이라고 칭하고 싶다. 좀더 정확하게는 앞에서 살펴본것과 같이 인공지능의 주요한 성과가 대부분 인공지능의 여명기, 즉 1956년 부터 최초의 10년 내지는 20년사이에 태어났다고 본다. 그 후 몇가지 큰 발명은 있었지만 발전 방향에 대해 마한다면 마이너 체인지 였다.

그러나 딥러닝에 대표되는 특징표현 학습은 여명기의 혁신적인 발명, 발견에 필적할 만한 대발명이다. 컴퓨터가 스스로 특징표현을 만들어 내는것은 그자체만으로 큰비약인것이다. 


사실대부분의 딥러닝이 딥뉴럴 네트워크를 의미하지만 그렇지 않은 경우도 있다. (예 딥가우시안프로세스

인간의 뇌는 겹친 구조를 하고있어서 뉴럴네트워크 연구 초기부터 깊은층 의 뉴럴네트워크를 만드는것을 당연한 시도로 생각했지만, 아무리 노력해도 잘되지 않았다.


층이 늘어날 수록 자유도는 올라가고, 뉴럴네트워크로 표현할 수 있는 함수의 종류는 층을 거듭하면 포갠만큼 늘어난다 여겼지만, 정작 해보면 그렇게 되지 않고. 정밀도가 오르지 않는것이다. 왜냐하면 깊은층에는 오차반대전파 (가중치 수정)가 아래쪽까지 도달하지 않기 때문이다.


그런데 딥러닝은 그 다층의 뉴럴네트워크를 실현했다. 어떻게 실현한것일까?

딥러닝이 종래 기계학습과 다른점이 크게 2가지가 있다. 하나는 한층씩 계층마다 학습해 가는점, 또하나는 오토 인코더라는 정보 압축기를 사용했다는 점이다.

오토 인코더에서는 조금 바뀐 처리를 하는데, 뉴럴 네트워크를 만들기 위해서는 정답을 주어서 학습시키는 학습페이즈가 필요하다.

예를들면 손으로쓴 3이라는 이미지를 보여주면 정답데이터로 3을 준다. 그런데 오토인코더에서는 출력과 입력을 같이한다. 다음의 그림에서 볼 수 있듯이 손글씨3의 이미지를 입력하고 같은 손글씨 3의 이미지로 서로 답하기를 하는것이다.

손글씨3의 이미지를 입력하고 이것이 3입니다 라고 가르치는 것이 아니고, 손글씨 3의 이미지를 입력하고 정답은 같은 손글씨 3의 이미지라고 가르치는 것이다. 

제프 호킨스의 그의 저서 생각하는 뇌 생각하는 컴퓨터(진짜 재미 보장)에서 이방식을 예상하고 있었다.

오토인코더 사진 올리기

'Artificial Intelligence > Deep Learning' 카테고리의 다른 글

딥러닝에서의 기술발전  (0) 2016.01.22
딥러닝 다계층  (0) 2016.01.22
뉴럴 네트워크  (0) 2016.01.21
기계 학습  (0) 2016.01.21
인공지능 발전 역사  (0) 2016.01.21
Posted by MIDDLE
,

뉴럴 네트워크는 기존의 기계학습이 분류한다고 말하는 기능을 우아한 방법으로 실현 하려는것인데 반해서 뉴럴 네트워크는 인간의 뇌신경 회로를 흉내내 매우 복잡한 구조의 힘을 통해 분류 하려는 것이다.

인간의 뇌는 뉴런의 네트워크로 구성되어 있어서 각 뉴런은 시냅스를 통해 서로 전기 자극을 전달한다. 여기엔 임계값 이라는 개념이 있는데, 자극이 일정 임계값을 넘지 못하면 전기신호가 발화되지 않아 그값이 0이되고 발화하면 1이되어 정보를 전달하는 방식이 뉴런사이에서 일어난다.


뉴럴 네트워크는 이러한 생체 뉴런의 정보 전달방식을 모사하였으며, 각 노드는 시냅스를 모방하고 있다고 보면된다. 아래층 뉴런으로부터 받은 값에 가중치를 곱하고, 그합을 시그모이드 함수(S자 곡선)을 거쳐 출력한다.

(시그모이드 함수는 온-오프를 수학적으로 취급하기 쉽도록 하기 위한 함수이다.)


일련의 흐름중에서 중요시 되는것은 가중치의 부여로, 인간의 뉴런이 학습에 의해 시냅스의 결합 강도를 변화시키듯이 학습하는 과정에서 중요성의 부여를 변화시켜 최적인 값을 출력하여 조정하는 것으로 정밀도를 높여간다. 결과적으로 훈련 데이터를 통해 이 가중치값들이 결정되면 이들의 결정된 네트워크를 통해 입력 데이터를 분류하는것이 바로 뉴럴 네트워크이다.

예를 들면

돈을 빌리는 사람의 경제상황과 상환할 수 있는가, 아닌가?

어떤문서가 외설인가, 그렇지 않은가?

어떤 이미지에 수상한 인물이 비치고있는가, 아닌가?

어떤 사람의 성적과 그 사람이 대학에 합격할 것인가, 아닌가?

어떤 고객의 정보와 그 사람이 단골손님이 될것인가, 아닌가?

연구실에서는 신입생들에게 자신이 좋아하는 데이터로 분리방법을 연구해 컴퓨터에 학습시켜 자동적으로 분류하시오라는 과제를 내고있다.


시간이 걸리는 학습, 순식간인 예측

기계 학습은 뉴럴 네트워크를 만드는 학습페이즈와 완성된 뉴럴 네트워크를 사용해서 정답을 내는 예측 페이즈 2개로 나뉜다. 학습 페이즈는 1,000건으로부터 100만건정도의 대량의 데이터를 입력하고, 서로 답변 맞춤을 하여 틀릴때마다 W1과 W2를 적절한 값으로 수정하는 작업을 일괄적으로 되풀이한다. 이 작업은 8만개의 가중을 수정하기 위해서 7만장의 이미지를 계속 입력하는 셈이어서 정말로 시간이 많이 걸린다. 통상 몇초 부터 길때는며칠 걸리는 것도 있다. 그러나일단 완료 되면 사용할 때는 간단해서 그저 완성된 가중치를 이용해 새로운 입력데이터를 이가중치 네트워크에 통과 시켜주기만 하면된다,. 이 작업은 순식간에 끝난다.


학습페이즈와 예측페이즈 사진 올리기

'Artificial Intelligence > Deep Learning' 카테고리의 다른 글

딥러닝 다계층  (0) 2016.01.22
딥러닝  (0) 2016.01.22
기계 학습  (0) 2016.01.21
인공지능 발전 역사  (0) 2016.01.21
인공지능과 딥러닝 이란?  (0) 2016.01.21
Posted by MIDDLE
,

기계 학습은 제 2차 AI붐에서는 지식을 많이 받아 들일수록 그만큼 행동할 수는 있었지만 기본적으로 입력한 지식 이상의 것을 할 수  없었다. 그릭 입력하는 지식이 보다실용적이어야 하고, 예외에도 대응할수 있도록 만들려면 방대해져서 언제까지나 입력시킬수는 없었다. 근본적으로는 기호와 그것이 가리키는 의미가 결부 되지 않았고, 컴퓨터가 의미를 취급하는것은 매우 어려웠다.

이러한 폐쇄갑 속에 차근차근 힘을 키워온것이 기계학습이란 기술이며, 그 배경에는문자 식별등의 패턴인식 분야에서 오랜세월 축적되어온 기반 기술과 증가하는데이터의 존재가 있었다.

특히 인터넷상에 있는 웹페이지의 존재는 강렬해서 웹페이지의 텍스트를 다루는 것이 가능한장연어 처리(Natural Language Process)와 기계 학습의 연구가 크게 발전했다.

그결과 통계적 자연어 처리(Statistical Natural Language Process)라고 불리는 영역이 빠른 속도로 발전했다. 이것은 예를 들어 번역을생각 할때에 문법 구조나의미 구조를 생각하지 않고, 단지 기계적으로 번역되는 확률이 높은 것을적용시켜 나가면 된다는 사고방식이었다.


기계학습에서 학습한다는 것은 분류 한다는 의미로 통한다.

기계학습이란 인공지능 프로그램 자신이 학습하는 구조를 말한다. 도대체 학습은 무엇인가? 어떻게 하면 학습 했다고 말할 수 있는 것인가?

학습의 근간을 두는 것은 '분류한다'라는 처리이다. (물론 회귀 등의 작업도 있지만 여기에선 분류에 초점을 맞춰 설명한다.) 잘 분류할 수 있으면 사물을 이해할 수도있고 판단해서 행동할 수도 있을것이다. 분류라는 것은 그러한 학습과정중 가장 기본단계인데. 다시말해 Yes냐 No 로 대답하는 문제이다.

예를 들어 어떤것을 보았을때 그것이 만져도 되는것인지 아닌지 알고 싶다고하자. 이것을 Yes or No 문제이다. 


기계 학습은 크게 지도학습 (Supervised Learning) 비지도 학습(unsupervised Learning)으로 나눌 수 있다.

지도학습은 입력과 올바른 출력이 세트가 된 훈련 데이터를 미리 준비하고, 어떤 입력이 주어졌을때 올바른 출력이 나오도록 컴퓨터에 학습을 시킨다.

통상적으로 인간이 교사욕할을 하며 올바른 훈련 데이터에 한해 올바른 분류의 결과를 알려준다. 예를 들어 문서 분류라면 할당해야 할 라벨은 이문서는 '정치 분야', 이문서는 '경제 분야'라는 문서의 카테고리가 될 것이며, 이미지 인식이라면 이 이미지는 '요트', 이미지는 '꽃'이라는 라벨이필요 할것이다. 이렇게 라벨링이 되어있는 데이터 세트로는 로이터통신의 데이터 세트라는것이 유명한다. 2만개 신문 기사데이터에 135개의 카테고리가부여되어 있어서 문서 분류 연구에서 잘 사용되고 있다.


비지도 학습은 입력용 데이터만 주고 라벨링 없이 데이터에 내재하는 구조를 파악하기 위해서 이용할 수 있다. 데이터속에 있는 일정한 패턴이나 룰을 추출하는 것이 목적이다. 정체의데이터를 공통 항목을 가지는 군집으로 나누거나(클러스터링), 빈출 패턴을 찾는것이 대표적인 비지도 학습 태스크이다. 예를 들면 어떤 슈퍼 마켓의 구매데이터로 먼곳에서 물건을 사러오고 평균 구매단가가 높은 그룹과 근처에서 사러와서 구매단가가 낮은 그룹을 데이터 분포를 통해 밝혀내는것은 클러스터링의 한예라고 할 수 있다.

또한, 기저귀와 맥주를 함께 구매하는 경우가 많다라는 것을 발견하는것이 빈출 패턴 마이닝 혹은 상관 룰 추출이라고 불리는 처리이다. 이와같이 비지도 학습은 인간의 라벨링 없이도 데이터 분포만으로 그패턴을 인식하는 학습 방법 말한다.


'Artificial Intelligence > Deep Learning' 카테고리의 다른 글

딥러닝 다계층  (0) 2016.01.22
딥러닝  (0) 2016.01.22
뉴럴 네트워크  (0) 2016.01.21
인공지능 발전 역사  (0) 2016.01.21
인공지능과 딥러닝 이란?  (0) 2016.01.21
Posted by MIDDLE
,

인공지능은 지금까지 총 3번의 붐이 일어났다.

제 1차 AI붐은 1950년 후반~1960년대를 말한다.

컴퓨터 추론 탐색을 하는 것으로 특정한 문제를 푸는 연구가 진행되었다.


제 2차AI붐은 1980년대 이며 컴퓨터에 지식을 넣으면 똑똑해진다는 접근법이 전성기를 맞이하고, 익스퍼트 시스템이라 불리는 실용적인 시스템이 많이 만들어졌다. 그러나 지식을 서술하고 관리하는 것이 엄청나게 방대하다는 것이 밝혀 지면서 AI는 1995년 다시 겨울 시대로 돌입하였다.


제3차 AI붐은 현재 2000년대부터 웹이으로 대량의 데이터를 이용한 기계학습이 조용히 퍼져왔다. 그리고 AI연구는 3번째 붐으로 도달했다. 빅데이터 시대에 널리 퍼진 기계 학습과 기술적으로 크게발전한 딥러닝(특징표현 학습) 등 2개의 큰 파도가 겹쳐지면서 탄생하였다.


인공지능 연구 평면도 사진추가

'Artificial Intelligence > Deep Learning' 카테고리의 다른 글

딥러닝 다계층  (0) 2016.01.22
딥러닝  (0) 2016.01.22
뉴럴 네트워크  (0) 2016.01.21
기계 학습  (0) 2016.01.21
인공지능과 딥러닝 이란?  (0) 2016.01.21
Posted by MIDDLE
,