"신경망(뉴럴 네트워크)": "뉴로모픽 컴퓨팅"의 "Hello, World!"
1. 개요
2. "뉴로모픽 컴퓨팅", 생물학적 뇌를 모방하려는 시도
3. 국내 디지털 뉴로모픽 반도체 연구
4. 신경망 (Neural Network): 인공지능의 "Hello, World!"
5. C++ 크래스 로 구현한 신경망
---------------------------------------------------------------------------
1. 개요
요즘 눈만뜨면 마주치는 '인공지능'. 누구나 이야기 하지만 이를 공부하려면 무엇부터 시작해야 할지 난감하기 이를데 없다. 인간 뇌의 기작을 흉내낸다는 뉴로모픽 컴퓨팅(Neuromorphic Computing)은 전통적인 디지털 계산기는 물론 아날로그 회로를 이용해 다양한 방법으로 구현하는 시도(연구)가 이뤄지고 있다[참고].
[출처] ‘뇌 구조의 반도체로 만들다’ 뉴로모픽 반도체의 등장, https://news.skhynix.co.kr/post/jeonginseong-column-ai-6
신경망은 인공지능의 첫걸음에 해당한다. 전통적 폰 노이만 구조 컴퓨터로 신경망을 구성했을 때의 문제점으로 엄청난 계산량과 그로인한 과도한 전력 소모라 할 것이다. 이를 극복할 요량으로 시스톨릭 어레이 같은 병럴처리 구조를 취하며 계산 정밀도 낮추기등의 연구가 활발하다[Binary Neural Network]. 신경망을 디지털 컴퓨터로 구현할 때 가장 큰 문제는 수많은 뉴런의 연결을 구성하는 일이다. 폰노이만 구조의 컴퓨터를 사용하는 경우 배열형 자료를 사용하여 쉽게 신경망을 구성할 수 있다. 다만 엄청난 메모리 접근이 따라야 하므로 빠른 클럭의 고성능 컴퓨터가 필요하며 이는 전력 소모의 원인이 된다. 배열형 병렬처리 구조를 채택하여 뉴런(곱셈과 누산)전용의 처리장치에 대규모 지역 메모리를 두는 구조의 연구[Wafer Scale Computing]가 이뤄져 활용되고 있다[CPU, GPU, NPU, TPU, ...... TPU v4, A Brief Guide of xPU for AI Accelerators]. 하지만 연산기 사이의 연결을 근본적으로 해결하지 못한다.
어쨌든, 본격적인 인공지능 컴퓨팅의 연구에 앞서 신경망에 대한 이해를 높여보자. "Hello, World!"는 컴퓨팅 언어를 배울때 제일 먼저 해보는 예제다. Hello, world!를 출력하는 것이 프로그래밍 언어를 배우는 첫 번째 단계로 일종의 암묵적인 룰이 되었다. 그야말로 프로그래머들에게는 국룰인 단어이다[출처]. "Hello, world!"를 출력 했다는 뜻은 컴파일 도구의 기초적인 사용법을 알며 아울러 표준 입출력 장치를 다룰 수 있다는 의미가 담겨있다. 마이크로 컨트롤러를 처음 익힌다거나 FPGA와 HDL의 첫 예제로 LED 를 깜빡이게 하는데, 'Hello, World!'격에 해당한다고 하겠다. 인공지능의 "Hello, World!"에 해당하는 예제가 바로 신경망이다. C++ 크래스로 구현한 인공지능 신경망의 예제를 소개 한다. 신경망 크래스에 학습 함수에 if 문장이 한개도 나오지 않는다. 무작위 숫자에서 시작하여 의미있는 연결 강도(웨이트)로 접근해 가는 과정을 '학습'이라 한다. 이 예제는 C++의 크래스와 템플릿의 공부에 매우 훌륭한 교재 이기도 하다.
2. "뉴로모픽 컴퓨팅", 생물학적 뇌를 모방하려는 시도
고전적인 컴퓨팅 방식에 한계(어떤?)가 와서 이제 인간의 뇌가 행동하는 방식을 반도체로 구현한 Neuromorphic Computing이 AI의 대세라는데 도데체 그게 뭔지 궁금하다면 아래 동영상을 보자.
Neuromorphic Computing Is a Big Deal for A.I., But What Is It?
인텔의 엔지니어가 이야기 하는 뉴로모픽 컴퓨팅도 들어보자. 전기적 신호를 제어하여 인간의 뇌를 모방하려는 시도에서 시작 되었지만 엉뚱(?) 하게도 생물학적 뇌와 다른 방향으로 발전해 왔다. 오늘날 최신 '전통적 컴퓨터'는 생물학적 뇌의 '학습'과는 매우 멀다. 정밀한 계산을 빠르게 수행하는 목표에 충분히 도달하자 이제 뇌처럼 작동하는 전자기기를 만들려고 한다. 복잡한 계산을 빠르고 정확하게 수행하기에 이어 급기야 '생각하기'도 기계에 맞기고 싶어졌나보다. 인간의 수고를 기계에 맞기는데 익숙해진 인간은 이제 '생각'하기도 귀찮아졌나? 단순한 계산과 학습행동은 기계에 맞기고 좀더 높은 수준의 '생각'을 하자고 한다. 그 '생각'이 온통 '쉽게 돈벌기'에 쏠려 있지만 말이다.
Architecture All Access: Neuromorphic Computing Part 1
전통적인 컴퓨터는 한계에 도달했다. 2그램 밖에 안되는 새의 뇌는 20밀리와트의 에너지를 쓰면서도 하늘을 누빈다. 하늘을 날기는 커녕 도로위에서 움직이는 '자율주행'을 수행하는 전통적인 컴퓨터는 '학습(train)'과 '행동반응(inference)'에 관한한 새만도 못하면서 너무나 많은 에너지를 소모하고 있다. 전통적인 컴퓨터의 한계를 벗어나려고 생물학적 뇌를 들여다보고 새로운 구조를 가져야 한다는 것을 깨닳았다.
Architecture All Access: Neuromorphic Computing Part 2
3. 국내 디지털 뉴로모픽 반도체 연구
국내 여러 대학교와 연구소, 반도체 기업등에서 '인공지능 반도체'를 연구 한다고 한다. 그중 디지털 계산기 방식의 연구가 이뤄지고 있다니 들어보자.
[서울대 AI 연구원] 뉴로모픽 컴퓨팅을 활용한 차세대 컴퓨팅 시스템(지능정보융합학과 전동석 교수)
뇌를 닮은 반도체? 뉴로모픽 시스템! / 샤연소개
삼성, SK도 만든다는 그 반도체 인간 뇌 모방 '뉴로모픽 칩'
"뉴로모픽 하드웨어 디자인" - 박종길박사, KIST
4. 신경망 (Neural Network): 인공지능의 "Hello World!"
동영상에서 가장 많이 등장하는 신경망(Neural Network)은 인공지능 컴퓨팅의 첫걸음이라 할 수 있다. 필기체 숫자 인식의 수행을 새로 개발한 인공지능 컴퓨터의 성능을 측정하는 척도로 삼고 있다. 그렇다면 신경망이 뭔지 알아보자.
But what is a neural network? | Chapter 1, Deep learning
동영상의 내용을 글로 읽어보기 바란다.
https://www.3blue1brown.com/lessons/neural-networks
내용중 아래 내용이 눈길을 끈다.
Somehow identifying digits is incredibly easy for your brain to do, but almost impossible to describe how to do. The traditional methods of computer programming, with if statements and for loops and classes and objects and functions, just don’t seem suitable to tackle this problem.
필기한 그림을 보고 인간의 뇌에서 숫자를 간단하게 인식(사실은 분류!)하지만 어떻게 그렇게 수월하게 해내는지 모른다. 전통적인 컴퓨터 프로그래밍 기법, if 문장이나 for 반복문, 객체 지향적 프로그래밍 따위로 될일이 아니라는 것을 알고 있다.
Gradient descent, how neural networks learn | Chapter 2, Deep learning
이번에도 글로 읽어보자.
https://www.3blue1brown.com/lessons/gradient-descent
눈길을 끄는 문장이 나온다.
To start things off, initialize all the weights and biases to be random numbers. This network will perform horribly on the given training example since it’s just doing something random.
학습하기 전 각 뉴런 사이의 가중치는 '무작위' 숫자로 시작한다. 엄청난 계산을 수행 한 끝에 마침내 숫자를 구분할 능력을 가지게 된다. 필기한 화상을 구분 한다는 것이 '지능' 이라 할 수 있을까? 어쨌든 이 신경망은 '무작위' 숫자에서 스스로 의미있는 '능력'을 가진 숫자로 변한다. 이를 두고 네트워크가 '알아서' 학습했다는 것이다.
What is backpropagation really doing? | Chapter 3, Deep learning
Backpropagation calculus | Chapter 4, Deep learning
5. C++ 크래스 로 구현한 신경망
인공지능의 "Hello, World!"에 해당하는 예제가 바로 신경망이다. 아래에 소개한 C++ 크래스로 구현한 인공지능 신경망의 예제를 읽어보기 바란다. 신경망 크래스의 학습 함수에 if 문장이 한개도 나오지 않는다는 점에 주목하자. C++의 크래스와 템플릿의 공부에 매우 훌륭한 예제 이기도 하다.
[CodeProject] Artificial Neural Network C++ Class, https://www.codeproject.com/Articles/5292985/Artificial-Neural-Network-Cplusplus-Class
"신경망 크래스"에 Eigen 라이브러리와 Vector STL 이 사용되고 있다. 생소하다면 아래 블로그 글을 참조하자.
[1] C++ - Eigen Library 정리 - Matrix,Vector 초기화|작성자 민초맛 젤리, https://blog.naver.com/junghs1040/222104963167
[2] [C++] vector container 정리 및 사용법 [개발자 지망생:티스토리], https://blockdmask.tistory.com/70
댓글 없음:
댓글 쓰기