출처: https://www.newscientist.com/article/mg23331144-500-ai-learns-to-write-its-own-code-by-stealing-from-other-programs/



ff3ywn-1-800x533.jpg



Created by researchers at Microsoft and the University of Cambridge, the system, called DeepCoder, solved basic challenges of the kind set by programming competitions. This kind of approach could make it much easier for people to build simple programs without knowing how to write code.


마이크로소트와 캠브릿지대학교 연구진이 개발한 시스템 '딥코더'가 프로그래밍 대회에서 주어지는 것과 같은 기본적인 문제들을 푸는데 성공했다.

해당 기술은 코딩을 전혀 모르는 사람들도 단순한 프로그램을 만드는데 도움을 줄 것으로 예상된다.



“All of a sudden people could be so much more productive,” says Armando Solar-Lezama at the Massachusetts Institute of Technology, who was not involved in the work. “They could build systems that it [would be] impossible to build before.”


"사람들의 생산성을 순식간에 늘려줄 수 있습니다"라고 MIT공대의 아르만도 솔라-레자마(본 연구에는 참여하지 않음)가 말했다.

"예전에는 만들기가 불가능했던 시스템도 만들어낼 수 있을 것입니다".



Ultimately, the approach could allow non-coders to simply describe an idea for a program and let the system build it, says Marc Brockschmidt, one of DeepCoder’s creators at Microsoft Research in Cambridge, UK.


궁극적으로 해당 기술은, 코딩전문가가 아닌 사람들도 단순히 프로그램에 대한 아이디어를 시스템에 입력하기만 하면 시스템이 스스로 알아서 프로그램을 만들어내는 시대를 열어줄 것으로 기대된다고 딥코더의 개발자 중 한 명인 캠브릿지대학교 마이크로소프트연구소 소속 마크 브록슈미트가 말했다.



DeepCoder uses a technique called program synthesis: creating new programs by piecing together lines of code taken from existing software – just like a programmer might. Given a list of inputs and outputs for each code fragment, DeepCoder learned which pieces of code were needed to achieve the desired result overall.


딥코더는 이른바 프로그램 합성 기술을 사용하는데, 이는 기존 소프트웨어의 코드들을 가져다가 새로운 프로그램을 만드는 기술이다. 코드조각 각각에 대한 입력과 출력 목록이 주어지면 딥코터는 주어진 과제를 달성하기 위해 어떤 코드조각을 갖다 붙여야 하는지 배운다.




One advantage of letting an AI loose in this way is that it can search more thoroughly and widely than a human coder, so could piece together source code in a way humans may not have thought of. What’s more, DeepCoder uses machine learning to scour databases of source code and sort the fragments according to its view of their probable usefulness.


이렇게 인공지능을 자유롭게 내버려 두는 것의 장점 중 하나는, 인공지능이 인간 코더보다 더욱 세심하고 폭넓은 탐색을 수행하여 인간이 생각조차 못했던 방식으로 소스코드를 짤 수 있다는 점이다. 이에 더하여 딥코더는 기계학습을 통해 소스코드 데이터베이스를 샅샅이 탐색하여 그 중 자신의 관점에서 쓸모있을 것으로 예상되는 코드들만 골라낸다.



All this makes the system much faster than its predecessors. DeepCoder created working programs in fractions of a second, whereas older systems take minutes to trial many different combinations of lines of code before piecing together something that can do the job. And because DeepCoder learns which combinations of source code work and which ones don’t as it goes along, it improves every time it tries a new problem.


위에서 말한 이유 덕분에 딥코더는 기존에 개발된 프로그래밍 알고리즘보다 더욱 속도가 빠르다. 딥코더는 제대로 작동하는 프로그램을 만드는데 몇 분의 1초 밖에 걸리지 않는다. 기존의 프로그램 알고리즘은 프로그램을 완성하기 전에 먼저 프로그램 작동에 필요한 코드들을 다양하게 조합하여 일일히 테스트를 하는데 수 분이 걸렸다. 또 딥코더는 소스코드의 어떤 조합이 작동을 하고 어떤 조합은 작동하지 않는지를 배우기 때문에 새 과제를 풀 때마다 딥코더의 성능이 향상된다.



The technology could have many applications. In 2015, researchers at MIT created a program that automatically fixed software bugs by replacing faulty lines of code with working lines from other programs. Brockschmidt says that future versions could make it very easy to build routine programs that scrape information from websites, or automatically categorise Facebook photos, for example, without human coders having to lift a finger


이 기술은 다양한 분야에서 응용될 수 있다. 이미 2015년에 MIT 연구진은 다른 프로그램에서 제대로 작동하는 코드를 가져다가 붙임으로써 소프트웨어 버그를 자동수정하는 프로그램을 개발한 적이 있다. 브록슈미트는 차기 버전의 시스템에서는 인간 코더들이 손가락 까딱하지 않고 웹사이트 정보를 수집하는 프로그램이나 페이스북 사진 분류 프로그램을 만드는 것이 가능해질 수도 있다고 말했다.



“The potential for automation that this kind of technology offers could really signify an enormous [reduction] in the amount of effort it takes to develop code,” says Solar-Lezama.


"해당 기술이 제공하는 자동화의 잠재력은 곧 코드 개발에 들어가는 노력이 크게 감소한다는 것을 의미합니다"라고 솔라-레자마는 말했다.



But he doesn’t think these systems will put programmers out of a job. With program synthesis automating some of the most tedious parts of programming, he says, coders will be able to devote their time to more sophisticated work.


하지만 그는 이런 시스템이 프로그래머들을 대체할 것으로는 생각하지 않았다. 다만 프로그래밍에서 가장 지루한 부분을 프로그램 합성기술로 자동화하면 인간 코더들은 좀 더 복잡한 일에 전념할 수 있을 것이라고 그는 말했다.



At the moment, DeepCoder is only capable of solving programming challenges that involve around five lines of code. But in the right coding language, a few lines are all that’s needed for fairly complicated programs.

“Generating a really big piece of code in one shot is hard, and potentially unrealistic,” says Solar-Lezama. “But really big pieces of code are built by putting together lots of little pieces of code.”


현재 딥코더는 겨우 코드 5줄 분량의 프로그래밍 과제를 풀 수 있다. 하지만 제대로 된 코딩언어라면 코드 몇 줄만 가지고도 충분히 복잡한 프로그램을 짤 수 있다.

"단번에 대규모 코드를 짜는 것은 어렵고 거의 불가능한 일입니다"라고 솔라-레자마가 말했다. "하지만 대규모 코드는 여러 개의 작은 코드조각을 짜맞춰 만들어지는 법이지요"라고 그는 덧붙였다.