728x90

LLM을 활용한 프롬프트 엔지니어링에 관심이 생겨 찾다가 좋은 글이 있어 스크랩!

 

원본 및 번역본

https://huyenchip.com/2023/04/11/llm-engineering.html

 

 

Building LLM applications for production

[Hacker News discussion, LinkedIn discussion, Twitter thread]

huyenchip.com

https://docs.google.com/document/d/1AR1v7p4ckJBXn4zv2saFX4ssQDKYuU2gE_aVO2QFHrs/edit#heading=h.qcfvwsgyftx6

 

Building LLM applications for production

Building LLM applications for production by Chip Huyen 원본: https://huyenchip.com/2023/04/11/llm-engineering.html 번역: DeepL + mnncat@gmail.com 최근 제가 많이 받은 질문 중 하나는 대규모 언어 모델(LLM)이 머신 러닝 워크플

docs.google.com

 

 

제목: 대규모 언어 모델(LLM) 애플리케이션을 프로덕션에 사용하기 - Chip Huyen

1부: 프롬프트 엔지니어링 제품화의 어려움
이 부분에서는 LLM을 프로덕션에 사용하기 위한 주요 도전과제들을 다룹니다.

- 자연어의 모호성: 자연어는 모호하며, 이로 인해 LLM의 출력이 예측불가능하게 됩니다.
- 프롬프트 평가: LLM은 프롬프트에 따라 다르게 반응하므로, 프롬프트를 평가하는 것이 중요합니다.
- 프롬프트 버전 관리: 프롬프트 최적화 및 수정을 위한 버전 관리 시스템이 필요합니다.
- 비용 및 지연 시간: LLM의 실행은 비용이 들고 시간이 걸립니다. 그래서 비용 효율적인 방법을 찾고, 빠른 처리를 위한 방안이 필요합니다.
- 프롬프트 vs. 파인튜닝 vs. 대안: 프롬프트 튜닝, 파인튜닝, 임베딩 및 벡터 데이터베이스와 같은 대안적인 방법들에 대해 논의합니다.

2부: 작업 결합성
이 부분에서는 여러 작업을 구성하고 복잡한 애플리케이션을 구축하기 위해 제어 흐름과 도구를 사용하는 방법을 설명합니다.

- 여러 작업으로 구성된 애플리케이션: 복잡한 애플리케이션을 구축하기 위해 여러 작업을 어떻게 결합할 것인가에 대한 방법론을 다룹니다.
- 에이전트, 도구, 제어 흐름: 애플리케이션의 다양한 부분을 조정하고 제어하는 방법에 대해 논의합니다.
- 도구 vs. 플러그인: 두 가지 접근법의 장단점을 비교합니다.
- 제어 흐름: 순차, 병렬, if, for 루프 등 다양한 제어 흐름에 대해 설명합니다.
- 에이전트 테스트하기: LLM 에이전트를 테스트하고 개선하는 방법에 대해 논의합니다.

3부: 유망한 사용 사례
이 부분에서는 LLM을 기반으로 한 애플리케이션의 사용 사례들을 살펴봅니다.

- AI 어시스턴트: AI 어시스턴트는 복잡한 작업을 자동화하고 사용자의 작업을 돕습니다.
- 챗봇: LLM 기반 챗봇은 텍스트 기반 대화를 처리하며 사용자와 상호작용합니다.
- 프로그래밍과 게임: LLM은 코드 작성이나 게임 설계와 같은 작업에서 유용하게 사용될 수 있습니다.
- 학습에 활용하기: LLM은 교육 및 학습 환경에서 많은 잠재력을 가지고 있습니다.
- 내 데이터와 대화하기: 사용자가 자신의 데이터에 직접적으로 질문하거나 대화할 수 있는 시스템을 만드는 데 LLM을 사용할 수 있습니다.
- 검색과 추천: LLM은 검색 쿼리를 이해하고 결과를 개선하는데 도움을 줄 수 있습니다.
- 세일즈: LLM은 세일즈 활동을 자동화하고 개선할 수 있습니다.
- SEO: LLM은 웹 페이지의 SEO를 향상시키는 데 도움이 될 수 있습니다.

글의 주요 결론은 LLM이 높은 잠재력을 가지고 있지만, 그것을 제품화하고 실제 환경에 배포하는 것은 여전히 많은 도전과제를 안고 있다는 것입니다.

 

Building LLM applications for production

Building LLM applications for production by Chip Huyen 원본: https://huyenchip.com/2023/04/11/llm-engineering.html 번역: DeepL + mnncat@gmail.com 최근 제가 많이 받은 질문 중 하나는 대규모 언어 모델(LLM)이 머신 러닝 워크플

docs.google.com

 

 

 

personal notes:

- distillation을 적용한 파인튜닝 - https://github.com/tatsu-lab/stanford_alpaca

 

GitHub - tatsu-lab/stanford_alpaca: Code and documentation to train Stanford's Alpaca models, and generate the data.

Code and documentation to train Stanford's Alpaca models, and generate the data. - GitHub - tatsu-lab/stanford_alpaca: Code and documentation to train Stanford's Alpaca models, and generate...

github.com

- 2021년이 그래프 데이터베이스의 해였다면, 2023년은 벡터 데이터베이스의 해입니다.

- 유망한 사용 사례:

https://docs.google.com/spreadsheets/d/1tmfn8jKb7T1x7PpyO7rD023tH2zc_WDg_OHh0aVXIrw/edit#gid=174517450

https://docs.google.com/spreadsheets/d/1GqwPo1FpAbe_awmNZW5ZMH69yc5QtEr7ZYw-ckaz_mQ/edit#gid=795016726

 

제목 없는 스프레드시트

Results Name,Project 1 Liner,Demo / Code Link / Hugging Face Spaces (Proof of Code!) Andrew Kean Gao,Twilio text service for Hindus,<a href="http://VedasGPT.org">VedasGPT.org</a> Will Brown,Hire GPT3 to sell your product ,<a href="http://magicform.ai/">mag

docs.google.com

- LLM이 데이터 분석을 대신 해줄 수 있나요? <-- 현재는 코드 인터프리터가 추가되어  가능함!

728x90

사전 학습(pretraining)과 압축 센싱(compressed sensing) 모두 머신러닝과 신호 처리 분야에서 중요한 개념이며, 각각 희소성(sparsity)을 활용하는 방법이지만, 그 활용 방식과 목표에는 중요한 차이가 있습니다.

1. 사전 학습: 이는 일반적으로 딥 러닝 모델에서 사용되는 방법으로, 모델의 초기 가중치를 설정하는 방법입니다. 사전 학습은 주로 큰 데이터셋에서 먼저 모델을 학습시킨 후, 이를 더 작은 특정 작업에 맞게 미세 조정하는 방식으로 사용됩니다. 이때 희소성의 개념은 모델의 가중치 또는 표현이 희소해질 수 있도록 학습 과정을 제어하는데 사용될 수 있습니다. 예를 들어, 오토인코더의 은닉층을 희소하게 만드는 것이 여기에 해당합니다. 이 방식은 노이즈에 강하고 중요한 특징을 잡아내는 능력을 향상시킬 수 있습니다.

2. 압축 센싱: 이는 신호 처리 분야에서 발견된 방법으로, 희소한 신호를 샘플링하고 재구성하는 프로세스입니다. 희소성은 이 방법의 핵심이며, 신호의 대부분이 0 또는 0에 가까운 값으로 구성되어 있을 때 신호를 효과적으로 샘플링하고 압축할 수 있습니다. 이렇게 샘플링된 신호는 후에 원래의 신호로 복구될 수 있습니다. 이 방법은 원래의 신호를 효과적으로 복구하기 위해 필요한 샘플 수를 크게 줄일 수 있어, 매우 효율적인 방법입니다.

결국, 사전 학습과 압축 센싱 모두 희소성을 활용하지만, 그 목적과 사용 방식에는 큰 차이가 있습니다. 사전 학습은 모델의 성능을 향상시키고, 압축 센싱은 신호를 효과적으로 샘플링하고 복구하는 데 중점을 두고 있습니다.

728x90

 

L1 노름 최소화 문제는 다음과 같습니다:

minimize ||y - Xw||^2_2 + λ||w||_1

여기서 y는 응답 변수, X는 설명 변수, w는 가중치, ||.||_2는 L2 노름 (유클리드 거리), ||.||_1은 L1 노름 (맨해튼 거리), λ는 정규화 파라미터입니다.

이 최적화 문제는 일반적으로 닫힌 형태의 해를 가지지 않습니다. L1 노름은 절대값 함수를 포함하므로, 그레디언트를 계산하거나 표준 최적화 기법을 적용하기 어렵습니다. 따라서, 이 문제는 수치적 최적화 방법, 예를 들어 좌표 하강법, 경사 하강법, 또는 더 복잡한 최적화 방법 (예: 내부점 방법)을 사용하여 해결됩니다.

그러나, 이 최적화 문제의 부분 최적화 문제는 닫힌 형태의 해를 가질 수 있습니다. 예를 들어, w의 한 요소를 고정하고 나머지 요소로 최적화하는 문제는 닫힌 형태의 해를 가집니다. 이 사실은 좌표 하강법의 구현에 사용됩니다.

728x90

L0 노름은 벡터의 0이 아닌 요소의 수를 측정하는 노름입니다. 머신러닝과 통계에서, L0 노름은 변수 선택이나 피처 선택에 자주 사용되며, 이는 모델의 복잡성을 줄이고 과적합을 방지하는 데 효과적입니다.

그러나 L0 노름 정규화의 해를 직접 구하는 것은 계산적으로 매우 어려운 문제입니다. 그 이유는 다음과 같습니다.

1. 비볼록(non-convex) 최적화 문제: L0 노름은 비볼록 함수이기 때문에 전역 최적해를 찾는 것이 어렵습니다. 이 문제는 지역 최적해에 빠지기 쉬워, 그레디언트 기반의 최적화 방법이 잘 작동하지 않습니다.

2. 조합 최적화 문제:L0 노름 최적화는 본질적으로 조합 최적화 문제입니다. 가능한 모든 피처의 부분 집합을 검토해야 하므로, 피처의 수가 많아질수록 계산 복잡도가 기하급수적으로 증가합니다.

3.희소(sparse) 해: L0 노름은 정확히 0인 가중치를 강조하므로, 최적의 해는 일반적으로 많은 피처 가중치가 0인 '스파스' 해가 됩니다. 이는 모델의 해석 가능성을 높이지만, 모델의 예측 성능을 저하시킬 수 있습니다.

이러한 이유로, 실제로는 계산적으로 용이하며 비슷한 속성을 가진 L1 노름 (Lasso) 또는 L2 노름 (Ridge) 정규화를 L0 노름의 대안으로 사용하는 경우가 많습니다.

728x90

릿지 회귀(Ridge Regression)와 서포트 벡터 머신(SVM)은 모두 머신러닝 알고리즘으로, 선형 및 비선형 패턴을 찾아내는 데 사용됩니다. 그러나 두 방법 간에는 몇 가지 중요한 차이점이 있습니다.

1. 목표 함수: Ridge 회귀는 오차 제곱의 합 (즉, 잔차 제곱의 합)을 최소화하고자 합니다. 이는 모든 관찰치를 고려한 모델을 만듭니다. 이와 대조적으로, SVM은 마진을 최대화하는 결정 경계를 찾습니다. 마진은 클래스 사이의 거리로, SVM은 이를 최대화하여 최적의 결정 경계를 찾으려고 합니다. 이로 인해 SVM은 모든 데이터 포인트를 고려하지 않고, 결정 경계 근처의 '서포트 벡터'라는 특정 데이터 포인트만 고려합니다.

2. 과적합 방지: Ridge 회귀는 L2 정규화 방식을 사용하여 모델의 복잡성을 제한하고 과적합을 방지합니다. 이는 모든 가중치를 약간씩 축소시킴으로써 모델을 단순화합니다. 반면, SVM은 소프트 마진 분류를 통해 일부 오분류를 허용함으로써 과적합을 방지합니다.

3. 비선형 패턴: Ridge 회귀는 선형 패턴을 가정하지만, SVM은 비선형 패턴을 캡처할 수 있습니다. SVM은 '커널 트릭'을 사용하여 고차원 공간에서 분리 가능한 결정 경계를 찾을 수 있습니다.

이러한 차이점들로 인해, Ridge 회귀는 오차를 최소화하는 선형 회귀 모델이 필요한 경우 유용하며, SVM은 복잡하고 비선형적인 데이터 패턴을 처리해야 하는 복잡한 분류 문제에 더 적합할 수 있습니다.

+ Recent posts