이번 GDSC DevFest에서 내가 소속되어있는 상명GDSC에서는 이는 ml5.js와 sketch RNN을 알아보고, sketch RNN을 직접 실습하는 "시리야 그림그려줘 - 그림그리는 인공지능" 이라는 주제를 가지고 참가하게 되었습니다.
ml5.js는 보다 더 쉽게 머신러닝을 활용할 수 있도록 만든 ML라이브러리
TensorFlow를 기반으로 하여 제작되었고 브라우저의 GPU를 활용하여 웹에서 훈련과 모델 사용이 가능
NYU의 Interactive Telecommunications/Interactive Media Arts program에서 오픈소스 프로젝트로 진행
- 이 라이브러리를 활용하여 다양한 머신러닝을 구성 가능
기본적으로 뉴럴네트워크를 구성하여 훈련/모델을 활용 가능
장점 : 미리 훈련된 모델을 활용할 수 있다는 점
x : 입력층의 입력 벡터
y : 출력층의 출력 벡터
셀 : 은닉층에서 활성화 함수를 통해 결과를 내보내는 역할을 하는 노드
→ 셀은 이전의 값을 기억하고 일종의 메모리 역할을 수행하므로 메모리 셀 또는 RNN 셀이라고 표현
현재 시점을 t라고 정의한다. 메모리 셀이 출력층 방향이나 다음 시점인 t + 1의 자신에게 보내는 값을 "은닉 상태" 라고 한다.
즉! t시점의 메모리 셀은 t-1 시점의 메모리 셀이 보낸 은닉 상태값을 t 시점의 은닉 상태 계산을 위한 입력값으로 사용한다.
RNN을 표현할때 위 그림처럼 화살표로 사이클을 그려 재귀 형태로 표현하기도 하고, 아래 그림처럼 여러 시점으로 펼쳐서 표현하기도 한다.
위 그림은
입력벡터의 차원 = 4,
은닉 상태의 크기 = 2,
출력층의 출력 벡터의 차원 = 2 인 RNN의 시점 t가 2일 때의 모습.
앞서 살펴본 RNN의 특징을 이용해 위 그림처럼 RNN은 입력과 출력의 길이를 다르게 설계할 수 있으므로 다양한 용도로 사용할 수 있다.
① one-to-many
이미지 입력에 대해서 사진의 제목을 출력하는 이미지 캡셔닝 작업에 사용할 수 있습니다. 사진의 제목은 단어들의 나열이기 때문에 시퀀스 출력
② many-to-one
입력 문서가 긍정적인지 부정적인지를 판별하는 감성 분류 또는 스펨 메일 분류에 사용할 수 있다.
③ many-to-many
입력으로부터 대답 문장을 출력하는 챗봇과 입력 문장으로부터 번역된 문장을 출력하는 번역기 등이 있다.