3D프린터의 DIY킷 자체 업그레이드에 대한 영상을 보았다. 영상의 내용은 보급형으로 값싸게 구매할 수 있는 3D프린터(DIY킷)를 이용해 에드온 처럼 부품을 프린팅하여 3D프린터 자신에게 다시 재조립 하는 것이다. 이 재조립을 통해 얻는 것은 바로 '성능의 개선, 성능의 향상, 정밀도 향상' 등 이로운 효과들.


이것을 보며 문득 한가지가 생각났다. '자기 자신을 사용해 스스로를 향상 시키는 것' 이것이 프로그램 분야도 가능하지 않을까? 라는 생각이었다. 기발한 생각이라고 생각했건만 그다지 기발하진 않았던 것 같다. 구글을 검색해보니 이미 이러한 생각을 한 사람이 여럿있었다.


그 중에서 이와 연관된 '프로그램이 프로그래밍을 하는 것' 에 대한 좋은 게시글이 있어서 스크랩을 했다. 2017년 3월에 작성된 게시글임에도 2018년 후반기에 접어들고 있는 현재 완성되지 않은 영역이다. 프로그래머로써 인공지능이 프로그래밍을 하는 시대가 온다면 도태되는 것을 느끼겠지만, 그와 상반적으로 반복적이고 지루한 코딩을 벗어나 창의력을 요구하는 부분을 계획, 입력 할 수 있게될 것이 주가 되는 것을 느낄 수 있지 않을까 생각한다. 


아래는 스크랩 글의 본문이다. 깔끔하게 정리되어있고 좋은 자료들을 제시하므로 관심이 있다면 읽어보는 것을 추천한다.



스스로 코딩을 하는 인공지능의 현 주소-Deepcoder


프로그래밍의 영역은 바로 인공지능 자체를 만드는 영역인 만큼, 기계와 인간과의 경쟁에서 인간 최후의 보루로 여겨지곤 합니다.


이렇게 원하는 프로그램의 코드를 자동으로 생성하는 소프트웨어의 개발 시도가 과거에 없었던 것은 아닙니다. Program Synthesis라는 이 분야는 기존에도 이미 많은 연구가 진행되어 온 컴퓨터공학 분야로, 연역적인 방법이 아닌 인공지능 기법이 적용되기 시작한 것은 최근입니다.



이 중, 인공지능 기법인 RNN(Recurrent Neural Network)을 적용하여 꽤 인상적인 결과를 낸 소프트웨어 DeepCoder가 등장했습니다. 이 소프트웨어는 마이크로소프트 연구소와 케임브리지 대학교에서 공동개발한 것으로 현재 유명 인공지능 학회인 ICLR(International Conference on Learning Representations) 2017의 심사를 대기 중입니다. 논문은 이 링크에서 직접 읽어볼 수 있습니다.


DeepCoder에서는 먼저 Program Synthesis 문제를 적용하기 위한 특수한 언어를 정의합니다. 이는 컴퓨터 공학 연구에서 흔히 쓰는 방법인데요, 실제 프로그램 개발에서 사용하는 언어는 워낙 복합적이다 보니, 문제 정의 자체가 매우 복잡해지고 계산량이 많아집니다. 그렇기 때문에 연구에서 사용하기 위한, 비교적 적은 영역에서만 구현을 해놓은 Domain Specific Language(DSL)을 정의하여 사용합니다. 이 논문에서는 정수형 변수와 배열만을 변수의 값으로 갖는 언어로 DSL을 제한합니다. 다음 예제를 보면 쉽게 이해할 수 있을 겁니다.


DeepCoder에서 정의한 DSL(Domain Specific Language)로 작성한 프로그램의 예제(논문 발췌)


이렇게 정의한 DSL에서 DeepCoder은 원하는 프로그램 입력값과 출력값의 쌍에 맞는 코드를 찾아냅니다. 예를 들어 [4, 6, 8]이라는 배열에 대해서 [22, 16, 10]이라는 결과를 프로그램을 출력하고 싶을 때, ‘각 인자에 3씩 곱하고 2를 뺀 뒤 배열의 순서를 뒤집는’ 코드를 찾아내는 방식입니다. 이때 프로그램으로서 가능한 모든 코드의 집합을 Program Space라고 합니다. 예를 들어 정의한 DSL이 3개의 함수만 사용하고, 코드의 줄 수는 5줄로 제한을 한다면 대략 가능한 코드의 경우의 수는 3^5인 81가지일 것이고, 이 81가지가 Program Space를 구성합니다.


많은 Program Synthesis 연구가 이 Program Space에서 특수한 검색 알고리즘을 통해 원하는 코드를 찾아내는 방식을 사용합니다. 이 논문에서도 마찬가지로 기존의 여러 검색 방식을 사용하는데, 방대한 Program Space에서 더 빠르게 원하는 코드를 찾기 위해 바로 딥러닝 기법 중 하나인 RNN(Recurrent Neural Network)를 적용합니다. 이 RNN은 이미 알려진 프로그램들로부터, 입력에 대해 출력하는 값으로부터 그 프로그램의 성질을 유추할 수 있도록 훈련됩니다. 이 프로그램의 성질로는 특정 함수의 사용 여부나 반복문의 개수 등이 있을 수 있습니다. 검색 알고리즘들은 훈련된 프로그램 성질 결과를 바탕으로 우선순위를 정해 검색에 활용하게 됩니다.


인공신경망으로 훈련을 한 결과 코드에서 각 함수가 나타날 확률을 예상할 수 있게 됩니다.(논문 발췌)


이렇게 인공신경망을 통해 훈련을 시키면, 우선순위가 높은 후보가 실제로도 원하는 결과값을 줄 확률이 매우 높아지기 때문에, 훨씬 더 빠른 방법으로 Program Synthesis를 할 수 있는 것입니다. 논문에 따르면 5줄 코드에 대해서 이 방법을 적용했을 때, 기존 방법보다 과제 수행 속도가 최대 907배까지 빨라지게 됩니다.


코드가 5줄일 때 기존 방법에 비해 RNN을 적용한 Deepcoder의 성능 향상(DFS, Enumeration, λ^2은 RNN을 적용한 검색 알고리즘)


아직까지 DeepCoder의 성능이나 적용 범위에는 많은 한계가 있습니다. 대표적으로 논문에서 채택한 방법이 앞서 설명한 매우 간단하게 정의된 DSL에서만 적용된 것이기 때문에, 이것보다 훨씬 복잡한 실제 언어에 이 방법을 적용하기에는 더 많은 노력이 필요합니다. 실제로 인공지능 기법을 사용하지 않은 전통적인 Programming Synthesis 분야에서도 실제 언어에서의 연구 성과는 아직 많이 미미한 상태라서, 실용적인 수준으로 발전하기 까지는 아직 많은 시간이 걸릴 것으로 보입니다.


코드의 줄 수 자체도 Program Space가 방대해지는 것을 막기 위해 5줄로만 제한을 했기 때문에 인공신경망 훈련에 큰 시간이 소요되지 않았지만, 코드의 줄에 따라 Program Space가 기하급수적으로 커지기 때문에, 실용적인 경우에 있어서는 인공신경망을 적용하는 것에도 큰 버거움이 따를 것입니다.


하지만, DeepCoder는 인공 신경망을 Program Synthesis 영역에 적용했을 때 성능이 크게 향상될 수 있는 가능성을 처음으로 보여주었습니다. 또, 기존의 여타 다른 연구 성과와는 달리 어떤 프로그램이나 언어에 대해서도 일관되게 인공지능을 도입할 수 있는 ‘일반적인 방법론’을 제시했다는 측면에서도 큰 의의가 있는 것 같습니다.


궁극적으로, 저자 중 한 명인 Marc Brockschmidt에 따르면 DeepCoder의 성과가 더욱 발전하면 코딩을 모르는 사람도 원하는 기능을 설명하면 프로그램이 자동으로 완성되게끔 시스템을 구성할 것이라고 합니다.


MIT 교수 Armando Solar-Lezama은 “이런 종류의 기술이 제안하는 자동화는 잠재적으로 프로그램 개발에 엄청난 생산성 향상을 불러올 수 있다”고 내다보고 있습니다. 그는 아무리 Program Synthesis가 발전한다고 해도, 개발 영역에서 많은 부분을 차지하는 반복적이고 지루한 작업들을 대체하지, 섬세한 고난이도의 작업은 대체하기 힘들 것이라고 보고 있습니다. 또한 그는 한번에 긴 코드를 ‘짠’하고 내놓는 것은 비현실적으로 보일 수도 있지만, 실제로 긴 코드 자체도 작은 여러 조각의 코드가 합쳐진 것이기 때문에 Deepcoder의 접근법이 옳은 뱡향이라는 것을 시사했습니다.


Programming Synthesis 분야는 80년대 초반까지만 해도 왕성히 연구가 펼쳐졌던 분야였다고 합니다. 하지만 당시 대부분의 연구 결과가 확장되어 적용되는 데에 실패하면서, 이 분야에 대한 흥미는 많이 약해져 갔습니다. 인공지능 기법이 최근 파급력을 가져오면서, Deepcoder을 비롯해 이 분야에도 인공지능을 적용해보는 시도가 다시 이루어지고 있습니다. (Deepcoder 논문의 서문에 몇몇 연구가 소개되어 있음)


인공지능에 힘입어 이 분야가 다시 추진력을 얻을 수 있을지, 그리고 Deepcoder가 그 성과를 주도할 수 있을지 매우 흥미진진합니다. 이와는 별개로, 독자 분들이 이 글에 들어온 첫 순간부터 궁금했을 법한 ‘인공지능이 개발자의 영역도 대체할 수 있을까?’라는 질문에 대해서는, ‘아직은 대체할 수 있다는 정량적 근거가 거의 없다’라는 대답을 해볼 수 있을 것 같습니다. 정량적 근거는 없지만, Deepcoder를 비롯한 Program Synthesis 분야의 발전을 기대해봅니다.


참고기사

New Scientist, “AI learns to write its own code by stealing from other programs


해당 게시글에 대한 출처

http://etinow.me/187 [에티 ETI] - '제이초이'님의 작성글입니다.

'FreeNote' 카테고리의 다른 글

지친 하루엔 역시 Lofi hip hop  (0) 2018.09.06
T스토리 주물럭  (0) 2018.08.19
블로그 이미지

irostub

iro의 잡화상점

,




<Lofi Hip Hop> 이라는 장르를 알게되었다. 재즈 스타일이 섞인 블루스 비트를 내뿜는 장르인데, 진짜 듣다보면 시간이 지나며 노랗게 바래가는 사진의 모습이 연상되는 아늑한 음악이다.


빗소리와 함께 특히 잘어울리면서 안정감을 주는데는 이 장르의 노래들이 최고인 것 같다. 물론 클래식, 재즈, 블루스, 여타 많은 안정적이고 귀가 즐거운 음악들도 좋지만, 심신의 안정감(?)에선 이 장르는 타의추종을 불허하는 듯.


꽤나 매니아들도 많고 찾는 소비자도 많아서인지 Youtube에도 Lofi Hip Hop이라고 검색해주면 수 많은 라디오 채널이 등장한다.


추천해준 Kian에게 고마울 따름.


네 음악 취향과 내가 비슷해서 내 인생이 음악으로 풍족할 수 있어서 고맙다.


아래 링크는 작성자가 자주 듣는 Lofi Hip Hop의 Youtube 채널들


안정적이고 편안~한 카페나, 한국에선 흔히 볼 수 없는 바&카페의 느낌을 듬뿍 느낄 수 있을 것이다! 추천 다섯개 쾅쾅!



https://youtu.be/5AEbq6X33A8

<Mellowbeat Seeker의 24/7 lofi hip hop radio - beats to chill/study/relax 채널>

 

https://youtu.be/hHW1oY26kxQ

<ChilledCow의 lofi hip hop radio - beats to relax/study to 채널>


https://youtu.be/7sT0pr51ZAw

<the bootleg boy2의 Smoke & Study - lofi hip hop radio 채널>

블로그 이미지

irostub

iro의 잡화상점

,

T스토리 주물럭

FreeNote 2018. 8. 19. 16:21



기존 로고가 맘에 들지않아서 바꿔본다고 바꿨는데


만들어놓고 보니까 붉은색이 더 나은 것 같은 느낌





타이틀 이미지도 맘에 들지않아서 교체해보려고 만들었으나...


HTML과 CSS를 전혀 공부하지 않은 탓에


 몇가지 기존에 있던 효과들을 지울 수가 없어서 실패


갑작스럽게 저 두 개를 공부하고싶어졌다.


천천히 공부하면서 공부한 것이나 올려볼까나..



ps. 다쓰고 끄적거리다가 좀더 제대로 뽑혀서 재수정 :) :)



블로그 이미지

irostub

iro의 잡화상점

,