신경망(neural network)을 구현할 때 가장 적합한 언어는?

sadrove의 이미지

인공지능 분야에서 사용되는 신경망이라 불리는 neural network를 구현할 때 가장 적합한 언어는 무엇일까요?..
대부분 책에서는 C/C++로 구현되어 있는데..
포인터때문인지는 몰라도 여간 복잡한게 아닙니다.(개념은 단순한데 구현이 복잡하다는 뜻)
속도 문제 때문에 C를 선호하는 것 같은데..
실제로 신경망이 쓰일 때(상용화되는 제품들)는 어떤 언어로 구현되는지 알고 싶네요..
더불어 주로 사용되는 플랫폼과 그리고 그 이유도 알려주시면 감사하겠습니다.
많은 조언 부탁드립니다..

spacelee의 이미지

뉴럴 네트웍을 프로그래밍해보지는 않았지만,
인공지능 쪽에서 베이시안 쪽은 프로그래밍 해봤습니다.

제가 만드는 애플리케이션은 주로 대용량에서 돌아가는 프로그램입니다.
여러가지 간단한 알고리즘부터 복잡한 알고리즘들이 포함되었고,
나중에 인공지능 쪽 알고리즘들이 들어가기 시작했는데,
인공지능쪽은 다른 알고리즘과 다르게
전체 성능에 미치는 영향이 엄청나더군요.

전체 애플리케이션은 C로 만들어졌는데,
인공지능쪽을 넣을때는 레지스터 변수하나, 메모리 카피 하나, 메모리 얼로케이션 하나도 잘못 짜면 전체적으로 미치는 영향이 엄청납니다.
(포인터가 없는 자바에서 짜면 보통 메모리 카피 횟수가 무지하게 늘어나죠..)

보통 인공지능쪽이 웬만한 알고리즘들보다
단위 작업 당 훨씬 많은 연산을 해서 그런 것 같습니다.

제 경험상 인공지능 쪽은 C/C++로 하는게
실용적으로 더 많은 도움이 되지 않을까 싶습니다.

추가로..
인공지능처럼 고도화된 알고리즘은 추상화된 수준에서
다루어져야 할 것 같은데,
위와 같은 상황이다 보니 오히려 굉장히 low level 까지
거꾸로 공부하고, 다루어야 하는 경우가 많았습니다.
OS의 메모리 관리라던지, 메모리 캐쉬, 컴파일러,
어셈블러 동작에 대한 예측이라던지....

'조엘온소프트웨어' 라는 책에도 보면..
추상화의 허와 실이라는 내용이 있던데
인공지능쪽을 다루면서 비슷한 경험을 했던거 같습니다.

권위를 의심할 것,어긋남을 존경할 것,자리잡기를 거부할 것,항상 자신을 재창조할 것 - MIT 미디어랩 -

체스맨의 이미지

많이 오래됐고 깊이 하진 못했지만, Neural network
( backpropagation 정도까지...) 을 구현해봤습니다.
당시에 제가 봤던 책에서도 C 로 구현되어 있었는데, C 여서
복잡했다기보다는 저자가 복잡하게 구현하는 스타일이었던 것 같습니다.

매트랩에 들어있는 neural network 툴킷에 있는
소스 ( m 파일)가 잘 정리되어 있었던 것 같습니다. 그걸 참조해서
C 로 구현해보시면 될 것 같은데요... 딱히 적합한 언어가
이거다라고 말씀드리긴 어렵군요.

Orion Project : http://orionids.org

쌀밥의 이미지

흔히 인공지능에 적합한 언어라고 알려져 있는 언어는 LISP이죠...

제가 LISP을 접해볼 기회가 없었기 때문에 잘은 모르지만

PS2용 게임중에서도 LISP으로 만들어진 유명한 .... 제목이 갑자기 기억이 안나는데.. 잭..뭐시기; 도 있더라구요..

그리고 역사적인 이유로 LISP이 인공지능관련 프로그램 개발에 많이 사용된것으로 알고 있습니다. ('해커 광기와 비밀의 기록'이라는 책에 그런 내용이 있었던걸로 기억합니다)

옛날에 만들어진 언어지만 실용적으로 쓸만한 언어인가 봅니다..

일하는 사람들의 희망 민주노동당 : http://www.kdlp.org
반공 교육의 성과로, 민주주의의 반대가 공산주의(또는 사회주의)라고 생각하는 사람이 많다.

쓴귤의 이미지

대용량의 데이터를 처리할 것이 아니라면 MATLAB의 신경망 툴박스를 쓰는 것을 추천해드립니다. 현재 나와있는 거의 모든 종류의 신경망이 다 구현되어 있기 때문에 매우 편리합니다. 그리고 MATLAB은 C와 연동이 되지요.

구현하기 나름이지만 신경망은 그렇게 계산용량을 많이 잡아먹지 않기 때문에 무슨 언어로 만들 건 큰 차이는 없을 것 같습니다. 예를들어 입력층에서 은닉층으로 가는 연결 강도를 교과서에 나와있는 것처럼 하나 씩 backpropagation시키 훈련하면 계산이 많이 필요하지만, 수학적으로 이 연결 강도는 입력들 간의 공분산 행렬의 eigenvalue와 동일합니다. 따라서 수학 계산 특히 행렬 계산이 편리한 언어로 만들면 됩니다.

'상용제품'은 신경망이 아니더라도 수치계산하는 경우라면 대부분 C/C++ 아니면 Java로 만들어져있습니다. 공개되어 있는 소프트웨어 중에는 Stuttgart Neural Network Simulator이 가장 괜찮은 것 같습니다. 이 제품은 C버전과 Java버전이 있습니다.

익명 사용자의 이미지

뉴럴네트워크가 연산량이 얼마나 많은데 연산량이 적다니요;;;

이분 neural network 제대로된거 안돌려보셨답니다! 글내려주세요

mach337의 이미지

신경망 자체를 공부하는게 목적이라면 자신이 가장 자신있는 언어...
예를 들면... C/C++ 과 같은 언어가 좋을듯 합니다만...
구현의 목적이라면...MATLAB 강추 입니다.
MATLAB 설치할때 toolbox 에서 neural network 을 체크하면 됩니다.
MATLAB에 있는 neural network toolbox 에는 재미있는 예제도 많습니다.

luxo21의 이미지

mach337 wrote:
신경망 자체를 공부하는게 목적이라면 자신이 가장 자신있는 언어...
예를 들면... C/C++ 과 같은 언어가 좋을듯 합니다만...
구현의 목적이라면...MATLAB 강추 입니다.

저와는 정반대 생각을 하고 계시네요. ^.^;;;

신경망의 경우 현재는 machine learning/pattern recognition 분야에서 많이 응용되고 있습니다. 특히나 최근에는 그간의 전통적인 adaptive filterng 분야에서 나아가 문자/음성 인식이나 애니메이션 분야와 같은 곳에서 진가를 발휘하고 있죠.

공부가 목적이라면 MATLAB의 TOOLBOX와 같이 이미 구현된 라이브러리를 참고하면서 구현된 알고리즘을 배워나가는 것이 좋을 듯 합니다. 문서화도 상당히 잘되어있는 편이라서 튜토리얼을 따라가면서 학습할 수 있는 장점이 있습니다.

하지만 실제 응용 어플리케이션을 만들어야 하는 입장이라면 MATLAB은 좋은 선택이 아니라고 봅니다.

AI 엔진으로 신경망을 사용할 경우, learning 과정은 상당한 시간을 소비하는 프로세스이기 때문에 속도 문제에 있어서 약점을 가지는 MATLAB은 좋은 선택이 아닌듯 하네요.

보통 교과서에서 예로 드는 간단한 BP 구현 정도에서야 속도 문제가 별 것 아니 것처럼 보일지 모르지만, 기본적으로 learning은 상당한 시간을 잡아먹는 프로세스입니다.

게임 알고리즘 책에서 신경망이 종종 소개되고는 하지만 어디까지나 책의 예제일 뿐이고, 사용자의 행동 패턴을 학습해서 애니메이션에 적용하는 수준만 해도 속도 부담때문에 적용시키기가 힘듭니다. 현재까지는 엄청난 물량공세가 가능한 헐리우드 영화에서나 mob-scene 등에 적극적으로 이용하고 있습니다.

물론 MATLAB c-compiler인 mcc를 사용하는 방법도 있습니다. 하지만 실제 사용해본 분들은 아시겠지만 mcc가 만들어 내는 소스코드를 이용하기가 여간 까다로운 것이 아닙니다.

또한 MATLAB이 상당히 고가인데다가 neural network tool box까지 더하면 상당한 비용이 들어가야 하는 문제도 있습니다.

구현의 경우는 저수준의 제어도 가능하면서 속도 문제를 해결할 수 있는 C/C++가 좋지 않을까 싶습니다.

코드 구현을 참고하시려면 HMM을 이용한 음성인식 라이브러리인 CMU의 sphinx를 살펴보시는 것을 권합니다. C로 짜여져 있는 구버젼의 경우 신경망의 기본 알고리즘들이 상당히 깔끔하게 구현되어 있어서 많은 연구에서 활용되고 있습니다(현재 신버젼은 JAVA로 진행되고 있습니다).

참고로 군사분야에서 만들어지는 adaptive filter system 분야에서는 요즘 OCAML의 활용이 두드러지고 있습니다.

MD 구축에도 핵심적인 역할을 맡고 있는 추적 레이다 제조업체인 레이시온의 발표자료들을 ㅤㅎㅜㅀ어보다보면 심심치 않게 OCAML의 사용이 언급되는 것을 볼 수 있습니다.

군사분야에서 가장 민감해하는 타입 에러 문제를 해결할 수 있는데다가 속도에 있어서도 C에 많이 뒤쳐지지 않고, 함수형 언어의 장점을 적용시킬 수 있다는 점에서 좋은 점수를 받고 있는 듯 합니다.

윗 분이 LISP도 언급하셨지만, 신경망 쪽에는 그다지 적합해 보이지 않습니다.

과거 LISP가 AI 쪽에서 많이 이용된 분야는 interactivity를 필요로 하는 분야, 특히 agent system이었고 그 쪽으로 많은 연구가 진행됐었습니다.

하지만 신경망의 경우와 같이 저수준의 제어가 필요한 경우는 LISP가 장점을 발휘하기에 적합한 무대는 아닌 듯 합니다. P. Norvig의 AI 책과 S. Haykin의 신경망 교과서의 차이 정도가 아닐까 싶네요.

아르아의 이미지

C나 OCAML이 아니라 왜 하필 JAVA를 사용하자는 결론이 나오게 된 것인지가 문득 궁금해집니다.
특별한 이유가 있는건가요?

xbroyw의 이미지

weka 원츄!

: )=

-------
good job :)
-------

오호라의 이미지

알고리즘 적용 및 학습은 4GL ( MATLAB )

구현은 3GL ( C/C++ )

computer graphics 쪽에서든 다음과 같은 경우에 참 애매한 경우가 있습니다.

input -> processing -> output

보통 곤잘레스아저씨책등을 보면 processing 에 대한 부분만 나와 있지. input과 output에 대한 얘기가 없습니다.

왜냐하면 이것만 설명하자면 또 책 한두권이니까요.

input은 크게 이미지파일, 동영상파일, 카메라 3개로 나뉩니다.

보통 raw, bmp, jpg... 등 jpg 하나만 봐도 머리 아프죠.

동영상은 찾아보다 지칠정도입니다.

카메라도 만만치 않습니다.

output도 input가 똑같은 거고,

보통은 fix된 raw 이미지를 쓰죠. 편하니까.^^;

이래저래해서 알고리즘은 MATLAB으로 돌려보고, 실제 구현단계는 C/C++ 을 쓰시는게 좋습니다.

Quote:
mach337 씀:
신경망 자체를 공부하는게 목적이라면 자신이 가장 자신있는 언어...
예를 들면... C/C++ 과 같은 언어가 좋을듯 합니다만...
구현의 목적이라면...MATLAB 강추 입니다.

MATLAB 라이브러리를 쓰시면 아마도 욕먹을 듯합니다. 너무 잘되어 있어서...^^;

Hello World.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.