GDSC DevFest

So'sCode·2021년 11월 5일
0

GDSC

목록 보기
1/3
post-thumbnail

1. DevFest

이번 GDSC DevFest에서 내가 소속되어있는 상명GDSC에서는 이는 ml5.js와 sketch RNN을 알아보고, sketch RNN을 직접 실습하는 "시리야 그림그려줘 - 그림그리는 인공지능" 이라는 주제를 가지고 참가하게 되었습니다.

2. ml5.js

  • ml5.js는 보다 더 쉽게 머신러닝을 활용할 수 있도록 만든 ML라이브러리

  • TensorFlow를 기반으로 하여 제작되었고 브라우저의 GPU를 활용하여 웹에서 훈련과 모델 사용이 가능

  • NYU의 Interactive Telecommunications/Interactive Media Arts program에서 오픈소스 프로젝트로 진행
    - 이 라이브러리를 활용하여 다양한 머신러닝을 구성 가능

  • 기본적으로 뉴럴네트워크를 구성하여 훈련/모델을 활용 가능

  • 장점 : 미리 훈련된 모델을 활용할 수 있다는 점

3. sketch RNN

RNN 이란 ?

  • Recurrent neural network의 줄임말로 순환 신경망이라고도 한다.
  • 인공 신경망의 한 종류로, 유닛간의 연결이 순환적 구조를 갖는다는 특징을 지니고 있다. 이러한 구조는 시변적 특징을 모델링 할 수 있도록 신경망 내부에 상태를 저장할 수 있게 해주기 때문에, 순환신경망은 필기인식 및 음성 인식 같은 시변적 특징을 지니는 데이터를 처리하는데 매우 유용하다.

순환신경망의 구조


x : 입력층의 입력 벡터
y : 출력층의 출력 벡터

셀 : 은닉층에서 활성화 함수를 통해 결과를 내보내는 역할을 하는 노드
→ 셀은 이전의 값을 기억하고 일종의 메모리 역할을 수행하므로 메모리 셀 또는 RNN 셀이라고 표현

현재 시점을 t라고 정의한다. 메모리 셀이 출력층 방향이나 다음 시점인 t + 1의 자신에게 보내는 값을 "은닉 상태" 라고 한다.
즉! t시점의 메모리 셀은 t-1 시점의 메모리 셀이 보낸 은닉 상태값을 t 시점의 은닉 상태 계산을 위한 입력값으로 사용한다.

RNN을 표현할때 위 그림처럼 화살표로 사이클을 그려 재귀 형태로 표현하기도 하고, 아래 그림처럼 여러 시점으로 펼쳐서 표현하기도 한다.

RNN을 뉴런 단위로 시각화

위 그림은
입력벡터의 차원 = 4,
은닉 상태의 크기 = 2,
출력층의 출력 벡터의 차원 = 2 인 RNN의 시점 t가 2일 때의 모습.

앞서 살펴본 RNN의 특징을 이용해 위 그림처럼 RNN은 입력과 출력의 길이를 다르게 설계할 수 있으므로 다양한 용도로 사용할 수 있다.
① one-to-many

이미지 입력에 대해서 사진의 제목을 출력하는 이미지 캡셔닝 작업에 사용할 수 있습니다. 사진의 제목은 단어들의 나열이기 때문에 시퀀스 출력

② many-to-one

입력 문서가 긍정적인지 부정적인지를 판별하는 감성 분류 또는 스펨 메일 분류에 사용할 수 있다.

③ many-to-many

입력으로부터 대답 문장을 출력하는 챗봇과 입력 문장으로부터 번역된 문장을 출력하는 번역기 등이 있다.

sketch RNN의 구조

  • 양방향 순환신경망으로 이루어져 있다.
  • 시점 t에서 출력 값을 예측할 때 어떤 시점의 데이터 뿐만 아니라 이후의 데이터로도 예측할 수 있다는 아이디어에서 기원

  1. Bidirectional RNN의 autoencoder를 이용해 입력 스케치로부터 latent Vector를 추출하고 이것을 다시 decoder에 넣어 새로운 스케치를 얻는다.
  2. 이 때 스케치는 완성된 한 장의 그림이 아닌 펜을 움직이는 액션들의 시퀀스로 취급된다. 따라서 스케치는 (∆𝑥(𝑥축 이동거리), ∆𝑦(𝑦축 이동거리) 𝑝1, 𝑝2, 𝑝3)로 이루어진 벡터들의 시퀀스로 표현된다.
  3. 여기서 p1은 펜을 종이에 그대로 대고 있는지, p2는 펜을 종이에서 땠는지, p3는 스케치가 끝났는지 여부를 나타내는 바이너리 값이다.

참고

profile
이왕하는거미루지말고하자.

0개의 댓글