Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬에서 Keras 임베딩 레이어를 활용해 레이어를 공유하는 방법

Keras는 ONEIROS(Open ended Neuro-Electronic Intelligent Robot Operating System) 프로젝트의 연구 과정에서 개발된 딥러닝 API입니다. 파이썬으로 작성되었으며, 머신러닝 문제를 효율적으로 해결할 수 있도록 돕는 고수준(high-level) API입니다. Keras는 Tensorflow 프레임워크 위에서 동작하며, 빠른 실험과 반복을 지원하기 위해 설계되었습니다. 또한 머신러닝 솔루션을 개발하고 캡슐화하는 데 필요한 핵심 추상화 계층과 빌딩 블록을 제공합니다.

Keras는 뛰어난 확장성과 크로스 플랫폼 호환성을 갖추고 있어 TPU나 GPU 클러스터 환경에서도 실행할 수 있습니다. 나아가 학습된 Keras 모델은 웹 브라우저나 모바일 기기에서 구동되도록 내보낼 수도 있습니다.

Keras는 이미 Tensorflow 패키지에 포함되어 있으며, 아래 코드 한 줄로 손쉽게 불러올 수 있습니다.

import tensorflow
from tensorflow import keras

함수형 API(Functional API)란?

Keras의 함수형 API는 순차형(Sequential) API로 만든 모델보다 훨씬 유연한 모델 구성을 가능하게 합니다. 함수형 API는 비선형 토폴로지를 가진 모델을 다룰 수 있고, 레이어를 공유하거나 여러 입력과 출력을 처리하는 데 적합합니다. 일반적으로 딥러닝 모델은 여러 레이어로 구성된 방향성 비순환 그래프(DAG, Directed Acyclic Graph) 형태를 띠며, 함수형 API는 바로 이 레이어 그래프를 손쉽게 구축할 수 있게 도와줍니다.

아래 코드는 Google Colaboratory 환경에서 실행했습니다. Google Colab은 브라우저에서 별도 설정 없이 파이썬 코드를 실행할 수 있으며, GPU에 무료로 접근할 수 있다는 장점이 있습니다. Colaboratory는 Jupyter Notebook을 기반으로 만들어졌습니다.

예제 코드

다음은 Keras의 임베딩(Embedding) 레이어를 사용해 두 입력 간에 레이어를 공유하는 예제입니다.

print("2000개의 고유 단어를 128차원 벡터로 매핑하는 임베딩")
shared_embedding = layers.Embedding(2000, 128)
print("가변 길이 정수 시퀀스 입력 A")
text_input_a = keras.Input(shape=(None,), dtype="int32")
print("가변 길이 정수 시퀀스 입력 B")
text_input_b = keras.Input(shape=(None,), dtype="int32")
print("동일한 레이어를 재사용해 두 입력을 인코딩")
encoded_input_a = shared_embedding(text_input_a)
encoded_input_b = shared_embedding(text_input_b)

코드 출처: https://www.tensorflow.org/guide/keras/functional

실행 결과

2000개의 고유 단어를 128차원 벡터로 매핑하는 임베딩
가변 길이 정수 시퀀스 입력 A
가변 길이 정수 시퀀스 입력 B
동일한 레이어를 재사용해 두 입력을 인코딩

코드 설명

  • 함수형 API로 만든 모델은 레이어를 공유(shared layer)할 수 있습니다.

  • 공유된 레이어는 하나의 인스턴스로서 같은 모델 안에서 여러 번 재사용될 수 있습니다.

  • 이러한 레이어는 그래프 내 여러 경로에 해당하는 특징(feature)을 학습합니다.

  • 공유 레이어는 비슷한 어휘를 사용하는 서로 다른 텍스트 영역의 입력을 인코딩하는 데에도 활용됩니다.

  • 이를 통해 서로 다른 입력 사이에 정보를 공유할 수 있습니다.

  • 정보 공유 덕분에 모델을 더 적은 양의 데이터로도 학습시킬 수 있습니다.

  • 위 예제 코드에서는 'Embedding' 레이어 하나를 서로 다른 두 텍스트 입력에 걸쳐 공유하고 있습니다.