Deep Learning 11

LLM : RAG

RAG (Retrieval Augmented Generation, 검색 증강 생성)오늘은 요즘 LLM 관련 기술 중 많이 언급되는 RAG에 대해서 이야기해보려고 합니다. RAG(영어권 사람들은 '랙'이라고 읽더라고요)은 Retrieval Augmented Generation의 약자입니다. 우리 말로는 검색 증강 생성이라고 부릅니다. Retrieval을 검색이라고 번역한 것인데요. 보통 검색하면 Retrieval보다는 Search가 떠오르지 않으시나요?Search와 Retrieval의 차이는 무엇일까요? 좀 뜬금없어 보이지만 오늘 논의와 관련이 있기 때문에 잠시 이야기하고 넘어가겠습니다.먼저 사전적인 의미부터 살펴보면 Search는 말 그대로 검색을 의미합니다. 수많은 후보 중에 내가 원하는 특정 대상을 ..

Deep Learning 2024.04.28

LLM : Fine Tuning & LoRA

들어가며LLM 이야기를 접하다보면 필수적으로 따라오는 용어 중에 Fine Tuning이라는 것이 있습니다. 우리 말로는 미세조정이라고 번역합니다. 오늘은 Fine Tuning이 무엇이고, 왜 LLM 이야기에 빠지지 않고 등장하는지에 대해 이야기해보려고 합니다.Pre-trained ModelFine Tuning에 대해서 이해하려면 Pre-trained Model을 먼저 이야기해야합니다. https://jins-sw.tistory.com/48 에서 Foundation Model이라는 측면의 LLM 이야기를 한 적이 있는데 참고하셔도 좋을 듯 합니다.예를 들어 어떤 이메일이 스팸인지 아닌지 판단하다는 자연어처리 기능을 만든다고 생각해보겠습니다. 전통적으로 하던 방법은 다음과 같습니다.이메일 데이터를 많이 많이..

Deep Learning 2023.11.12

Tensorflow가 GPU를 지원하는지 알아보자

Tensorflow를 설치해서 사용하다보면 현재 설치된 환경이 GPU를 제대로 지원하는지 아닌지 궁금할 때가 있습니다. 요즘은 설치가 많이 편해지기는 했지만, 리눅스 버전, GPU driver 버전, TF 버전, Cuda 버전 등 모두 맞추기가 쉽지 않았으니까요. TF를 설치를 해도 나도 모르게 CPU 버전으로 돌아가는 경우가 왕왕 있습니다. (GPU Tensroflow는 Docker를 이용하는 것을 추천합니다. Docker를 이용해서 편리하게 GPU Tensorflow를 사용하자) 현재 환경이 GPU를 지원하는지 어떻게 알 수 있을까요? 구글링을 해보면 TF 1.x 시절부터해서 여러가지 방법이 나옵니다. 현재 TF 2.x 기준으로 가장 간략한 방법은 다음 코드를 실행해보는 것입니다. import ten..

Deep Learning 2020.06.24

Tensorflow Custom Layer

Tensorflow Custom Training에서는 keras의 Model 클래스를 이용해서 Custom Model을 만들고 훈련시키는 법을 알아보았습니다. 이번에는 tf.keras.layers.Layer를 사용해서 Custom Layer를 만드는 법을 알아보겠습니다. Tensorflow Custom Training에서 만들었던 예시를 사용해서 이야기를 이어가보겠습니다. tf.keras.Sequential을 쓰지 않고 직접 Model의 동작을 구성하기 위해서 Custom Model을 사용한다면, Custom Layer는 Model 내에서 특정 Layer의 동작을 직접 구성하기 위해서 사용합니다. 예를 들어 새로운 Dropout 알고리즘을 생각해냈다고 가정해보겠습니다. MyDropout이라는 Layer를..

Deep Learning 2020.06.12

Tensorflow Callback 사용하기

1. Callback 이란? 모델을 훈련시키는 일은 대체적으로 오랜 시간이 걸립니다. 짧게는 몇분에 끝나기도 하지만 보통은 몇 시간에서 몇 일이 걸리기도 합니다. Tensorflow가 기본적인 Log를 출력해주기는 하지만 훈련이 끝날 때까지 기도하고 있기에는 너무나 불안한 일입니다. 그래서 Tensorflow는 모델을 훈련시키는 동안 어떤 이벤트들이 발생하면 개발자가 원하는 동작을 수행할 수 있는 방법을 제공하고 있습니다. 개발자가 원하는 동작을 Callback이라고 부릅니다. Callback 자체는 새로운 개념은 아닙니다. Event-driven 개발 방식에서 쓰이고요. GUI 개발을 해보신 분들은 익숙하실 겁니다. 기본 방식은 이렇습니다. Tensorflow가 미리 이벤트들을 정의합니다. 이벤트는 개..

Deep Learning 2020.06.04

Tensorflow Custom Training

Tensorflow를 사용하는 가장 큰 이유는 아마도 편리하게 Deep Learning 모델을 만들고 훈련시킬 수 있다는 점일 것입니다. 특히 2.0부터 Keras가 공식적으로 포함되면서 모델을 만들기가 더 쉬워졌습니다. 물론 그 전에도 Keras를 따로 사용하면 되기는 했지만요. Keras가 대부분의 인기 있는 아키텍처와 유틸리티를 지원하기 때문에 많은 부분을 직접 구현하지 않고, Keras의 구현을 가져다 쓸 수 있죠. 하지만 가끔은 Keras에서 아직 지원하지 않는 모델을 사용하고 싶을 때가 있고, 훈련 과정을 좀 더 세밀하게 제어하고 싶을 때가 있습니다. 이때 Tensorflow의 Custom Training 기능을 사용할 수 있습니다. 오늘은 Keras 패키지 밖의 Tensorflow 기능들도 ..

Deep Learning 2020.06.02

Pre-trained Word Vector를 Tensorflow에서 사용하기

Tensorflow에서 제공하는 Embedding Layer는 간편하게 사용하기에 좋습니다. 하지만 아무래도 대량의 데이터를 사용해서 별도로 훈련시킨 Word Embedding을 사용하는 것보다는 성능이 떨어집니다. (Tensorflow의 Embedding Layer vs fastText) fastText 같은 Library는 Python 인터페이스를 제공하기 때문에 pre-trained word vector를 Tensorflow에서 사용하기 쉬운 편입니다 (한국어 토큰의 단위는 뭐가 좋을까?). 하지만 이런 인터페이스가 없이 순수하게 단어와 그 단어의 Embedding 데이터만 있다면 어떻게 할까요? 결론부터 말하면 Keras Embedding Layer의 weights를 수동으로 지정해주고, trai..

Deep Learning 2020.05.20

CategoricalCrossentropy vs SparseCategoricalCrossentropy

Tensorflow는 classification task에서 간편하게 사용할 수 있는 cross entropy loss 함수를 제공하고 있습니다. Binary classification이라면 BinaryCrossentropy를 사용하면 되고, Multi-class classification이면 CategoricalCrossentropy를 사용하면 됩니다. 그런데 API를 보면 비슷하게 생긴 SparseCategoricalCrossentropy라는 녀석도 있습니다. 차이가 뭘까요? 결론부터 말씀드리면, 훈련 데이터의 label(target)이 one-hot vector 이면 CategoricalCrossentropy 훈련 데이터의 label(target)이 정수이면 SparseCategoricalCross..

Deep Learning 2020.05.14

Word Vector 훈련 데이터를 키우면 얼마나 도움이 될까?

지난 테스트(Tensorflow의 Embedding Layer vs fastText)에서 Tensorflow의 자체 임베딩보다는 아무래도 대용량의 데이터를 사용해서 훈련시킨 fastText가 성능 개선에 도움이 된다는 사실을 확인하고 또 궁금한 점이 생겼습니다. 그렇다면 fastText를 훈련시키는 데이터를 키우면 어떨까요? 한국어 위키피디아도 크기는 하지만 실제로 더 큰 데이터는 나무 위키입니다. 콘텐츠 품질에 대해 논란이 있지만 방대한 텍스트 데이터이기는 하죠. 그리고 다소 심한 구어체와 비속어들이 있지만 어떻게 보면 위키피디아보다 요즘 인터넷 상의 언어 형태를 더 잘 보여준다고 볼 수도 있고요. 그리하여 기존 위키피디아 + 네이버 영화 데이터에 나무위키 데이터까지 더해서 fastText를 훈련시켜보..

Deep Learning 2020.05.01

Tensorflow의 Embedding Layer vs fastText

지난 번 한국어 토큰 테스트(한국어 토큰의 단위는 뭐가 좋을까?)를 해보고나니, Tensorflow(Keras)의 Embedding은 어떨지 궁금했습니다. 그래서 지난번 테스트 중 가장 성능이 좋았던 "형태소+글자" 단위 토큰으로 비교를 해보았습니다. Embedding dimension은 fastText의 기본값 100으로 그대로 하고요. OOV를 위한 토큰을 추가합니다. import tensorflow as tf import numpy as np from tqdm import tqdm from konlpy.tag import Mecab OOV_TOKEN = '' EMBEDDING_DIM = 100 Toknizer와 코퍼스 읽는 건 앞에서 그대로 가져오고요. tagger = Mecab() def toke..

Deep Learning 2020.04.30