트랜스포머

정의

트랜스포머: 셀프어텐션 사용(단어간 장거리 종속성과 문맥 관계를 포착할 수 있게 하는 어텐션) 아키택처에서 파생된 AI 모델이며 사람의 언어를 이해 및 생성

 

종류

Language Modeling은 NLP의 하위분야로 '자동 인코딩 작업'과 '자기회귀 작업' 두가지 모델링 작업이 있음.

  • 자동인코딩: 알려진 어휘에서 문장의 어느 부분이든 누락된 부분을 채우도록 모델에 요청. 예시로는 BERT. 트렌스포머의 인코더 부분에 해당. 마스크 없이 양방향 표현을 생성. 문장 분류 또는 토큰 분류에 주로 사용됨.
  • 자기회귀(Autoregressive Language): 알려진 어휘에서 주어진 문장의 바로 다음에 가장 가능성 있는 토큰을 생성하도록 모델에 요청. 예시로는 GPT. 트렌스포머 모델의 디코더 부분에 해당

 

특징

2017년에 나온 트렌스포머는 seq2seq 모델이었음. 

아래 두가지 요소를 가지고 있음.

  • 인코더: 문장을 핵심구성 요소로 분리, 벡터화하고 어텐션을 이용해 텍스트 맥락을 이해(텍스트 이해가 뛰어남)
  • 디코더: 수정된 형식의 어텐션을 사용해 다음에 올 최적의 토큰을 예측하고 텍스트 생성(텍스트 생성이 뛰어남)

이 둘을 사용하면 seq2seq 모델이 됨.

BERT는 인코더, GPT는 디코더만 있는 모델, T5는 둘을 조합한 모델.

 

 

1.1 LLM의 작동원리

사전훈련(pre-training)과 파인튜닝되는지에 따라 성능이 결정됨. LLM기반 모델들은 언어와 단어의 관계를 배우고 이해하려는 훈련을 받음. 

 

Pre-training은 모델을 사전에 학습하는 것임. 예를 들면, BERT는 영어 위키백과(영어버전의 위키백과로 수집된 기사들)와 BookCorpus(다양한 장르의 소설, 비소설로 검증된 저자에 의해 영어로 작성된 문서들)에서 사전훈련 되었음. 

또한, 두가지 모델로 학습되는데 '마스크된 언어모델링'(한 문장 안에서 토큰의 상호작용을 인식하도록)과 '다음문장예측'(문장들 사이에서 토큰이 서로 어떻게 상호작용하는지) 모델링 작업을 수행하는데 전자는 개별 단어 임베딩을 가르치기 위함이고 후자는 전체 텍스트 시퀀스를 임베딩하는 방법을 학습하기 위함.

 

전이학습(Transfer Learning)

LLM내에서 전이학습은 말뭉치에서 사전훈련한 LLM을 가져와 작업 특정 데이터로 모델의 파라미터를 업데이트함.

이미 특정 언어와 언어간의 관계를 사전에 학습해서 새로운 작업에 성능 향상을 가능하게 함.

비지도 학습으로 일반적인 개념을 가르치고, 지도학습으로 모델을 파인튜닝

 

파인튜닝(Fine-tunning)

특정 작업의 성능을 향상시키기 위한 조정

 

어텐션(Attention)

다양한 가중치를 다르게 할당하는 메커니즘. 가장 중요한 정보를 강조 가능해짐. 

 

위 설명을 요약하자면, 

LLM은 큰 말뭉치에서 사전훈련되고 작은 데이터셋으로 파인튜닝됨. 트랜스포머는 고도의 병렬처리가 가능하여 빠르며 토큰 간의 장거리 의존성과 관계를 어텐션을 사용해서 포착 가능함. 특히, 어텐션이 Internal world model과 사람이 식별할 수 있는 규칙을 학습하는데 가장 주요한측면으로 보여지고 있음.

 

임베딩(Embedding)

단어, 구절, 토큰의 수학적 표현

토큰 임베딩(토큰의 의미를 임베딩), 세그먼트 임베딩, 위치임베딩(위치를 임베딩)등 여러 종류의 임베딩이 존재함.

텍스트가 토큰화되면 각 토큰에 임베딩이 주어지고 그 값들이 더해짐. 어텐션이 계산되기 전에 초기 임베딩을 갖게됨.

 

토큰화(Tokenization)

텍스트의 가장 작은 이해단위인 토큰으로 분해하는 과정

LLM에서는 전통적인 NLP에서 사용한 불용어제거, 어간추출, 잘라내기 등과 같은 것들이 필요하지 않음. 

out-of-vocaburary(OVV)구문을 어떻게 처리하나? 일단 더 작은 부분의 단어로 나눔. 

 

1.2 가장 많이 활용되는 LLM

BERT, T5(Google), GPT(OpenAI)은 트렌스포머 기반 아키텍쳐

 

BERT(Bidirectional Encoder Representation from Transformers)

문장의 양방향 표현을 구성하기 위해 어텐션 메커니즘을 사용하는 자동 인코딩 모델

문장 분류와 토큰 분류 작업에 이상적. 

Bidirectional: 자동 인코딩 언어 모델

Encoder: 트랜스포머에서 인코더만 활용

Representation: 어텐션을 활용

Transformers: 트랜스포머의 아키텍처를 활용

생성에 중점을 둔 느린 LLM에 비해 빠르게 처리 가능. 자유로운 텍스트 처리보다 대량의 말뭉치를 빠르게 분석하고 작업하는데 적합. 문서 분류나 요약보다는 사전훈련된 모델로 활용함.

 

GPT-4와 ChatGPT(Generative Pre-trained Transformers)

어텐션 메커니즘을 사용한 자기회귀 모델

텍스트 생성에 활용. 

Generative: 자기 회귀 언어 모델

Pre-trained: 디코더는 거대 말뭉치에서 학습

Transformers: 트랜스포머의 아키텍처를 활용

한번에 하나의 토큰을 생성하는데 뛰어남. 큰 문맥 윈도우를 주었을때 텍스트를 생성하는데 적합. 

 

T5(Text-to-Text Trsansfer Transformers)

텍스트 분류, 요약 및 생성하는 인코더/디코더 트랜스포머 모델

Text-to-Text: 시퀀스 투 시퀀스 모델

Transfer: 전이학습을 이용

Transformer: 인코더, 디코드를 모두 활용한 순수 트랜스포머

텍스트 처리와 이해하는 능력 그리고 생성까지 모두 필요로한 어플리케이션에 유용하며

GPT-3도 이러한 능력을 보유함. 

 

1.3 도메인 특화 LLM

domain-specific LLM은 특정 도메인에서 언어와 개념을 이해하기 위해 설계됨. (예시: 생물 의학 무넌에 사전 훈련된 BioGPT) 당연한 얘기지만 특정 도메인을 잘 이해하는거만큼 일반 LLM은 특정 도메인의 언어를 이해하는데 모자람이 있을 것임. 

 

1.4 LLM을 이용한 어플리케이션

  • 사전 훈련된 LLM으로 파인튜닝없이 기본 처리 하기
  • 전이학습을 사용해 사전 훈련된 LLM을 파인튜닝 하기
  • 사전 훈련된 LLM에 작업 요청하기

 

 

 

 

'데이터분석 > 딥러닝' 카테고리의 다른 글

Knowledge distillation & Calibration  (0) 2024.05.20
GAN 모델이란?  (2) 2021.04.06
CNN으로 개와 고양이 분류하기  (1) 2020.02.25
MNIST를 이용해 간단한 CNN만들기  (2) 2020.02.12
배치학습 vs 온라인학습  (0) 2020.02.12

1. 중복된 코드(duplicate code)

한곳을 바꾸면 중복된 곳도 똑같이 바꿔줘야하는 불편함이 가장 큼

-> 함수나 루프문을 활용해서 개선하기

2. 매직넘버 대체

3. 주석처리된 코드와 죽은 코드

4. 리스트컴프리핸션 활용하기

5. excep를 사용해서 에러를 넘기는 코드,불충분한 설명이 들어있는 코드

 

코드악취에 대한 잘못된 통념

1.  함수나 메소드에 return문은 하나만? No, 여러개여도 된다.

2. 함수에 try문이 둘 이상 있으면 안된다? No, 함수는 하나의 일만 하도록 만드는게 통상적이나, 번거롭게 둘로 나눠야하는 기능이 있는 경우 나누지 않아도 되고 try문으로 해결한다.

3. 플래그 인수는 나쁘다? No, 함수를 번거롭게 나누는것보다 낫다

4. 전역변수는 나쁘다? No

표기법 3가지: snake_case, camelCase, PascalCase

UPPER_SNAKE_CASE: 상수인 경우

 

PEP8 명명규약

  • 모듈은 소문자
  • 클래스는 파스칼케이스
  • 상수는 UPPER_SNAKE_CASE
  • 함수,메소드,변수명은 lower_snake_case
  • 클래스 메소드의 시작은 cls, 메소드의 시작은 self
  • 클래스의 프라이빗속성은 _, 퍼블릭 속성은 _ 없이

 

코드 포매팅: 소스코드에 일련의 규칙을 적용해 특정한 형식을 갖추게 하는 것

PEP8(Python Enhancement Proposal8): 파이썬 코어 개발팀이 제안한 작성방법

Black(코드 포매터)

 

가로 간격(horizontal Spacing)

  • 들여쓰기(Indentation): tab이 나타내는 공백 폭이 가변적이라 탭보다는 공백을 선호, 동시에 사용해서도 안됨. 일반적으로 4칸을 선호함.
  • 연산자와 식별자 사이의 공백 한칸
  • 구분자 뒤쪽에 공백 한칸
  • 마침표 앞뒤로는 공백 넣지 않기
  • 함수, 매소드, 컨테이너 이름 뒤에는 공백을 넣지 않기
  • 열고 닫는 괄호 앞뒤로 공백넣지 않기
  • 코드행 끝에 2칸의 공백으로 주석달기

 

세로 간격(Vertical Spacing)

  • 함수나 클래스는 2줄의 빈행, 클래스 내의 함수들은 한줄의 빈행을 넣어야 함

 

Black 사용하기

블랙 설치하기: python3 -m pip install --user black

명령행에서 블랙 실행하기: python -m black script.py

하위 파일을 모두 블랙으로 포매팅하기: python -m black 경로

표준 행 길이 설정: python -m blakck -l 120 script.py

따옴표를 변경하지 않도록 설정: python -m black -l 120 -S script.py

블랙으로 수정될 내용 미리보기: python - m black --diff script.py

 

명령행 간략 사용법

명령어 이력: history

글로브패턴: 와일드카드인 *, ?를 사용하여 표현하는 식

파일 보기: dir(윈도우), ls(맥OS, 리눅스)

폴더명에 공백이 있는 경우: 큰따옴표로 폴더명을 묶어서 명령인수를 만듦

마침표로 시작하는 파일: 설정파일 (숨겨짐)

ls에 해당하는 옵션: -l(긴 형식의 파일보기) , -a(숨김파일 포함해서 모두보기)

현재 경로 밑에 원하는 파일 검색: find . -name *.py 

파일 복사: cp [복사하려는 파일] [복사할 폴더]

파일 이동: mv [복사하려는 파일] [복사할 폴더]

파일명 변경: mv [변경하려는 파일] [변경명]

파일 삭제: rm -r (강제로)

폴더 생성: mkdir [폴더명]

프로그램의 위치 찾기: which [프로그램명]

모든 명령행을 지우고 싶을때: clear

환경변수 보기: env

환경변수에 설정된 값 보기: echo [환경변수]

 

 

환경변수: 각 프로세스에 영향을 주는 사용자 설정값들의 모임

프로세스를 띄울때, 환경변수가 copy되어 해당 프로세스에만 적용됨.

운영체제의 환경변수집합을 새로운 프로세스가 생성될때 복사되며 이를 master copy라고 함

프로세스를 시작하면 현재 디렉토리에서 프로그램을 찾고, 이후 PATH 환경변수에 설정된 경로에서 찾음

경로를 ':'으로 여러개 설정할 수 있으며 이름이 중복된다면 가장위의 PATH 환경변수에서 프로그램을 실행함

환경변수를 영구적으로 수정하고 싶다면, .bashrc 파일에 'export 환경변수 = 내용'을 추가

 

 

 

 

 

https://light-tree.tistory.com/196

 

딥러닝 용어 정리, Knowledge distillation 설명과 이해

이 글은 제가 공부한 내용을 정리하는 글입니다. 따라서 잘못된 내용이 있을 수도 있습니다. 잘못된 내용을 발견하신다면 리플로 알려주시길 부탁드립니다. 감사합니다. Knowledge distillation 이란?

light-tree.tistory.com

https://velog.io/@hwanee/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-On-Calibration-of-Modern-Neural-Network

 

[논문 리뷰] On Calibration of Modern Neural Network

본 논문은 딥러닝을 공부하면서 나로서는 한번도 생각해보지 못했던 점을 문제 삼으면서 현대의 신경망을 사용할 때 고려해야할 calibration에 대해 설명하고, 이를 해결하는 매우 간단한 temperature

velog.io

 

* 위 블로그 내용을 참고하여 정리한 글임.

 

Calibration이란?

The accuracy of predicted probability of model's ouput

 

예를 들어, 모델이 50% 정도의 신뢰도를 가지고 output을 줬을때, 그 output이 제대로 classification 된 정도가 실제로 50%가 된다면 모델은 잘 calibrated 되었다고 말함.

이는 모델의 예측값이 reliable and trustworthy 하다는 것을 뜻하기 때문에 매우 중요한 요소로 쓰임.

학습된 모델이 실제 얼마나 신뢰도를 가지는지를 판단하기 위함.

'데이터분석 > 딥러닝' 카테고리의 다른 글

LLM(Large Language Model)  (0) 2024.11.13
GAN 모델이란?  (2) 2021.04.06
CNN으로 개와 고양이 분류하기  (1) 2020.02.25
MNIST를 이용해 간단한 CNN만들기  (2) 2020.02.12
배치학습 vs 온라인학습  (0) 2020.02.12

아침: 

https://map.naver.com/p/search/%EC%84%B1%EC%82%B0%EB%B4%84%EC%A3%BD%EC%B9%BC%EA%B5%AD%EC%88%98/place/1351670584?c=15.00,0,0,0,dh&placePath=%3Fentry%253Dbmp

 

네이버 지도

성산봄죽칼국수 성산점

map.naver.com

 

성산포종합여객터미널에서 우도가는 매시간마다 들어가는 배가 있음

 

점심: 짜장면, 해물짬뽕

https://map.naver.com/p/search/%EC%9A%B0%EB%8F%84%20%EB%A7%9B%EC%A7%91/place/108105804?c=14.00,0,0,0,dh&placePath=%3Fentry%253Dbmp

 

네이버 지도

우도짜장맨

map.naver.com

 

 

 

 

우도즐기는법

https://blog.naver.com/sk-bubu_traveler/223395437375

 

제주도 성산항 우도 여행 배편 배시간 타는곳 가는 법 가는 방법 스쿠터 바이크 추천 매장 후기

안녕하세요 Map찌리 부부에요 오늘은 제주도 섬 여행 중에서 아름다운 섬으로 유명한 우도에 왔어요 1. 제...

blog.naver.com

우도 스쿠터 타기 

 

저녁: 갈치

 

https://map.naver.com/p/search/%EB%A7%9B%EC%A7%91/place/1525909689?c=13.12,0,0,0,dh&placePath=%3Fentry%3Dbmp

 

네이버 지도

해송갈치 제주성산일출봉점

map.naver.com

 

 

 

  • multiprocess와 multithread의 개념, 차이, 장단점

https://velog.io/@xxhaileypark/%EB%A9%80%ED%8B%B0-%EC%8A%A4%EB%A0%88%EB%93%9CMulti-Thread-%EB%A9%80%ED%8B%B0-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4Multi-process

 

멀티 스레드(Multi Thread) & 멀티 프로세스(Multi process)

프로세스(Process)란? 프로그램 : 어떤 작업을 위해 실행할 수 있는 파일. 정적인 개념 프로세스 : 프로그램이 메모리에 올라와 cpu를 할당받고 프로그램이 실행되고 있는 상태. 동적인 개념 프로세

velog.io

 

  • python 기본 패키지 multiprocessing 사용법(multi-process)

https://velog.io/@finallazy/Python-multiprocessing-Pool

 

Python - Pool로 함수를 병렬 처리

multiprocessing 모듈을 이용하여 CPU 개수에 맞게 병렬처리를 해보자

velog.io

  • dask 사용법 

https://chealin93.tistory.com/288

 

Dask 패키지 사용 in Python

Dask는 병렬처리를 지원하는 Python Library 대규모 데이터의 분산처리 지원 Pandas와 Numpy형식을 그대로 계산지원 Delayed라는 함수 형식으로 함수를 병렬로 지원 최적화된 Dynamic task scheduling 지원 Dask Arr

chealin93.tistory.com

 

개인의견: multi-process를 쓰거나 multi-thread를 쓰는걸 선택하는 상황에서 각각 장단점이 있다. 

dask패키지 자체를 구현할때 python 기본패키지인 multiprocessing을 사용하기때문에 사용성을 높이고 속도가 좀 더 느릴 수 있다고 생각한다. 

프로세스끼리는 같은 객체를 사용할 수 없고, 프로세스 수만큼 데이터나 모델이 만들어지면서 메모리 사용이 배로 늘어나게 된다. 

shared memory를 사용하면 해결될 수 있지만 thread만큼 같은 객체를 공유하는데 빠르지 않다. 

객체를 프로세스 내에서 새로 복사하기 때문에 multi-processing이 multi-threading보다 오래걸림. 

그렇기에 한번만 선언한다면 processing이 빠름

'프로그래밍 > 병렬처리' 카테고리의 다른 글

Dask 패키지 사용 in Python  (1) 2023.11.20

+ Recent posts