다이나믹 컴퓨테이션 그래프를 만들어주는 대표적인 딥러닝 프레임워크인 DyNet에서 미니배치 자동화 기능을 선보였습니다. DyNet 레파지토리에 있는 샘플 예제와 페이퍼로 설명하고 있습니다. 입력 데이터가 모두 균일한 크기일 때는 미니 배치 처리를 하는 것이 큰 일이 아니지만 그렇지 않은 경우에는 코드 구조를 복잡하게 만듭니다. “배치는 개발자의 책임이 아니라 프레임워크의 몫이다!”라고 이 페이퍼에서 말합니다. 🙂
위 왼쪽 그림을 보면 입력의 길이가 4개, 2개, 3개로 나뉘어진 입력 시퀀스를 오른쪽의 그림과 같이 알아서(!) 배치로 구성해 실행해 줍니다. 엔지니어는 왼쪽의 그림을 생각하면서 작성을 하되 손실이나 예측 값을 받을 그릇을 스칼라 변수가 아니라 리스트 변수로 넉넉히 여유를 잡아주면 됩니다. 배치로 처리해서 리스트에 담는 것은 프레임워크가 책임집니다. 아마도 이런 자동 배칭 기능은 정적 그래프를 지원하는 텐서플로우에는 꽤 아픈 곳을 찌르는 일이 될 것 같습니다. DyNet의 작업이 공개되자 파이토치(PyTorch)도 기능을 추가한다는 소식입니다.
(페이퍼 저자 중 한 사람인 Yoav Goldberg 교수가 최근에 NLP 책을 출간했습니다. 한번 읽어 보고 싶네요. ㅠ.ㅠ)