임베딩이 LLM 스택에서 거의 논의되지 않는 부분 중 하나인 점이 정말 놀라움, 직관적으로 네트워크가 의미적 연결을 추론할 수 있는 능력에 엄청난 영향을 미치는 부분이라고 생각했지만, 사람들은 그에 대해 별로 이야기하지 않음
임베딩의 문제점은 모델 자체 말고는 거의 판독이 불가능함에 있음, 임베딩이 입력 시퀀스의 의미를 분명히 인코딩하지만, 학습 과정에서 그 정보가 너무 압축되어서 모델의 디코더 헤드만 해독이 가능해짐, Anthropic이 Sonnet 3의 내부 피처를 해석 가능한 형태로 만든 연구가 있는데, 이건 내부 레이어의 활성화를 해석하려고 별도의 네트워크를 병렬로 학습시켜야 해서 비용이 큼
고차원 공간의 특이한 점은 대부분의 값이 서로 직교하고 아주 멀리 떨어져 있음, 그런데 차원 축소 기법으로 5만 차원에서도 개념들을 클러스터링할 수 있는 게 신기함
처음 임베딩에 대해 깊게 배우면서 “LLMs의 마법 중 최소 3분의 1은 임베딩에서 나오는 것”이라는 생각을 함, 단어들이 이미 의미적으로 유용하게 배열되어 있다는 사실 자체가 LLMs의 신비를 약간 벗겨줌, 여전히 경이롭긴 하지만 커튼 뒤가 조금 보이는 느낌임
임베딩이 컴퓨터가 인간 언어를 정량화할 수 있도록 해주는 일종의 “로제타 스톤” 같은 역할임, 이게 정말 중요한 이슈여야 한다고 생각하지만, 1,000차원 벡터 공간을 이해하려는 시도가 꽤 부담스럽다는 점도 인지함
임베딩에 대한 논의가 부족하다는 의견이 잘 이해되지 않음, 특히 RAG 적용 예시나 벡터 DB 얘기에서 임베딩은 항상 핵심 주제로 다뤄짐
튜토리얼이 매우 좋았음 — 컨텍스트 임베딩과 정적 임베딩의 차이가 중요함, 많은 사람이 word2vec(정적 임베딩)에 익숙하지만 컨텍스트 임베딩이 훨씬 더 강력한 경우가 많음, (참고로 페이지에서 스크롤만 해도 히스토리에 엄청난 기록이 추가되는 브라우저 히스토리 하이재킹이 심함)
더 고급 설명이 필요하다고 생각하는 부분은, 임베딩 관점에서 Encoder-Decoder 트랜스포머(BERT)와 Decoder-only 제너레이티브 모델의 차이임
작은 수정이 필요함: BERT는 인코더임(Encoder-Decoder 아님), ChatGPT는 디코더임, 인코더 모델(BERT)은 전체 문장을 다 볼 수 있어서 의미 표현에 유리함, 예컨대 “The bank was steep and muddy”에서 bank의 의미(강변인지 금융기관인지)를 문장 전체를 보고 판별할 수 있음, 반면 GPT류(디코더 모델)는 왼쪽에서 오른쪽 순서만 보기 때문에 문장 뒤 정보를 못 보고 예측함, 이에 대한 추가 자료는 huggingface의 modernBERT 포스트 참고 및 neoBERT 논문도 유익함
dust42의 설명을 덧붙이면, BERT는 인코더, GPT는 디코더, T5는 인코더-디코더임, 요즘 인코더-디코더는 덜 인기임, 인코더 모델은 분류, 정보 추출, 검색에 많이 쓰이고, 디코더는 텍스트 생성, 요약, 번역에 적합함, 최근 연구(Ettin 논문)에서도 이것이 확인됨, 둘 다 트랜스포머이므로 인코더를 디코더로 바꿀 수도 있고 그 반대도 가능함, 설계 차이는 양방향어텐션(모든 토큰이 모든 토큰을 볼 수 있음)과 오토리그레시브 어텐션(이전 토큰만 볼 수 있음)에 있음
매우 훌륭한 비주얼 가이드임! 나도 비슷한 컨셉으로 딥러닝에 대한 깊은 이해를 돕는 비주얼+오디오+퀴즈 방식 LLM 임베딩 레슨을 app.vidyaarthi.ai에서 제작함, 직접 체험 링크, 추상적 개념을 더 직관적이고 상호작용적으로 만드는 “직접 해보면서 배우는” 접근법을 추구함, 피드백 환영임(자기 홍보는 아님, 정말 열정적으로 만든 도구임)
접속이 잘 안되는 듯함, “Content-Security-Policy: The page’s settings blocked an inline style…”처럼 콘솔 오류 메시지가 잔뜩 뜸
LLM은 매우 고차원 벡터 공간을 저차원으로 줄임, 그런데 저차원 공간의 개별 축이 의미하는 바가 불분명하여, 정답 여부를 대부분 아웃풋에서만 확인 가능함, 이걸 해결하려는 연구가 궁금함
LLM들은 이 축소 표상을 위해 텍스트 데이터를 사용함. 즉, 현실이 아니라, 현실에 대한 인간의 기록을 학습함, Keen Technologies는 이런 한계를 피하기 위해 실제 센서 달린 로봇 데이터를 사용하는데, 훨씬 느리지만 장기적으로 더 정확한 모델을 만들 수 있다고 봄
LLM이 대화의 의미와 맥락 정보를 벡터 (내부 상태) 하나에 담기 때문에, 긴 대화에서는 반복적으로 그 벡터가 덮어써져서 초반 맥락이 점점 희미해짐, 이런 상태 관리를 벡터 백업 말고 다르게 할 방법이 있는지 궁금함
당신의 접근이 훨씬 직관적임, 왜 범주형/스칼라 특성의 임베딩 예시를 안 보였는지 궁금했음
아주 교육적이고 구조가 잘 잡힌 아티클임, 저자에게 감사함
저자 프로필은 Huggingface에서 볼 수 있음, HN 운영진이 예전엔 반응이 별로라 재투고 추천, 이 글이 좋았던 이유는 다양한 임베딩 유형을 예시로 다루기 때문임
LLM의 임베딩은 보통 입력 레이어 일부로, Word2Vec 등 사전학습 모델과 달리 학습 중 업데이트됨,
추가로 궁금한 점: 추론 단계에서 임베딩은 “토큰 ID -> 벡터” 형태의 룩업테이블인데,
수학적으로 보면 토큰ID를 긴 원-핫벡터로 인코딩한 뒤, 선형 레이어를 통과시켜 임베딩 벡터를 얻는 식임,
이 구조가 임베딩 학습에도 그대로 적용되는 건지, 즉 임베딩을 선형 레이어로 간주해서 역전파로 학습시키는 방식인지 궁금함
임베딩도 일반 역전파 과정에 포함됨, 다만 효율성 때문에 원-핫 인코딩은 실제로 안 씀,
선택된 벡터에만 그래디언트가 흐르도록 인덱싱을 미분 가능하게 구현함,
구체 예시는 내가 만든 미니 딥러닝 라이브러리 SmallPebble 소스 참고하면 도움됨
다른 코멘트를 좀 더 설명하자면,
인덱싱과 원-핫 벡터 곱은 수학적으로 동일함,
예를 들어 vocab이 N개, 시퀀스 길이 L이라면, NxL 희소 행렬을 임베딩 행렬에 곱해야 하는데,
실제론 각 열 당 인덱스 하나만 알면 되므로, 내부적으로는 숫자 하나(인덱스)로 표현함,
이 방식으로 순전파와 함께 역전파 역시 인덱싱 기준으로 별도로 작성해,
선택된 임베딩 벡터로 그래디언트가 흐르도록 처리함
Hacker News 의견
임베딩이 LLM 스택에서 거의 논의되지 않는 부분 중 하나인 점이 정말 놀라움, 직관적으로 네트워크가 의미적 연결을 추론할 수 있는 능력에 엄청난 영향을 미치는 부분이라고 생각했지만, 사람들은 그에 대해 별로 이야기하지 않음
임베딩의 문제점은 모델 자체 말고는 거의 판독이 불가능함에 있음, 임베딩이 입력 시퀀스의 의미를 분명히 인코딩하지만, 학습 과정에서 그 정보가 너무 압축되어서 모델의 디코더 헤드만 해독이 가능해짐, Anthropic이 Sonnet 3의 내부 피처를 해석 가능한 형태로 만든 연구가 있는데, 이건 내부 레이어의 활성화를 해석하려고 별도의 네트워크를 병렬로 학습시켜야 해서 비용이 큼
고차원 공간의 특이한 점은 대부분의 값이 서로 직교하고 아주 멀리 떨어져 있음, 그런데 차원 축소 기법으로 5만 차원에서도 개념들을 클러스터링할 수 있는 게 신기함
처음 임베딩에 대해 깊게 배우면서 “LLMs의 마법 중 최소 3분의 1은 임베딩에서 나오는 것”이라는 생각을 함, 단어들이 이미 의미적으로 유용하게 배열되어 있다는 사실 자체가 LLMs의 신비를 약간 벗겨줌, 여전히 경이롭긴 하지만 커튼 뒤가 조금 보이는 느낌임
임베딩이 컴퓨터가 인간 언어를 정량화할 수 있도록 해주는 일종의 “로제타 스톤” 같은 역할임, 이게 정말 중요한 이슈여야 한다고 생각하지만, 1,000차원 벡터 공간을 이해하려는 시도가 꽤 부담스럽다는 점도 인지함
임베딩에 대한 논의가 부족하다는 의견이 잘 이해되지 않음, 특히 RAG 적용 예시나 벡터 DB 얘기에서 임베딩은 항상 핵심 주제로 다뤄짐
튜토리얼이 매우 좋았음 — 컨텍스트 임베딩과 정적 임베딩의 차이가 중요함, 많은 사람이 word2vec(정적 임베딩)에 익숙하지만 컨텍스트 임베딩이 훨씬 더 강력한 경우가 많음, (참고로 페이지에서 스크롤만 해도 히스토리에 엄청난 기록이 추가되는 브라우저 히스토리 하이재킹이 심함)
더 고급 설명이 필요하다고 생각하는 부분은, 임베딩 관점에서 Encoder-Decoder 트랜스포머(BERT)와 Decoder-only 제너레이티브 모델의 차이임
작은 수정이 필요함: BERT는 인코더임(Encoder-Decoder 아님), ChatGPT는 디코더임, 인코더 모델(BERT)은 전체 문장을 다 볼 수 있어서 의미 표현에 유리함, 예컨대 “The bank was steep and muddy”에서 bank의 의미(강변인지 금융기관인지)를 문장 전체를 보고 판별할 수 있음, 반면 GPT류(디코더 모델)는 왼쪽에서 오른쪽 순서만 보기 때문에 문장 뒤 정보를 못 보고 예측함, 이에 대한 추가 자료는 huggingface의 modernBERT 포스트 참고 및 neoBERT 논문도 유익함
dust42의 설명을 덧붙이면, BERT는 인코더, GPT는 디코더, T5는 인코더-디코더임, 요즘 인코더-디코더는 덜 인기임, 인코더 모델은 분류, 정보 추출, 검색에 많이 쓰이고, 디코더는 텍스트 생성, 요약, 번역에 적합함, 최근 연구(Ettin 논문)에서도 이것이 확인됨, 둘 다 트랜스포머이므로 인코더를 디코더로 바꿀 수도 있고 그 반대도 가능함, 설계 차이는 양방향어텐션(모든 토큰이 모든 토큰을 볼 수 있음)과 오토리그레시브 어텐션(이전 토큰만 볼 수 있음)에 있음
임베딩 프로젝터를 활용하면 50개 이상의 단어뿐 아니라 3D 데이터 시각화에 대한 감각도 기를 수 있음, Tensorflow Embedding Projector 참고 바람
매우 훌륭한 비주얼 가이드임! 나도 비슷한 컨셉으로 딥러닝에 대한 깊은 이해를 돕는 비주얼+오디오+퀴즈 방식 LLM 임베딩 레슨을 app.vidyaarthi.ai에서 제작함, 직접 체험 링크, 추상적 개념을 더 직관적이고 상호작용적으로 만드는 “직접 해보면서 배우는” 접근법을 추구함, 피드백 환영임(자기 홍보는 아님, 정말 열정적으로 만든 도구임)
접속이 잘 안되는 듯함, “Content-Security-Policy: The page’s settings blocked an inline style…”처럼 콘솔 오류 메시지가 잔뜩 뜸
단어 클라우드 시각화나 쿼리 top-k 결과 보여주기가 더 직관적일 수 있다고 생각함, Tensorflow의 Embedding Projector에서 단어 입력 후 UMAP projection 선택해보길 추천함
좀 더 실용적인 접근의 설명도 sgnt.ai의 임베딩 설명글에서 다룸, 직접 작성했음
멋진 자료 감사함! 내가 이해한 바로는 LLM에 세 가지 큰 문제가 있음:
당신의 접근이 훨씬 직관적임, 왜 범주형/스칼라 특성의 임베딩 예시를 안 보였는지 궁금했음
아주 교육적이고 구조가 잘 잡힌 아티클임, 저자에게 감사함
LLM의 임베딩은 보통 입력 레이어 일부로, Word2Vec 등 사전학습 모델과 달리 학습 중 업데이트됨,
추가로 궁금한 점: 추론 단계에서 임베딩은 “토큰 ID -> 벡터” 형태의 룩업테이블인데,
수학적으로 보면 토큰ID를 긴 원-핫벡터로 인코딩한 뒤, 선형 레이어를 통과시켜 임베딩 벡터를 얻는 식임,
이 구조가 임베딩 학습에도 그대로 적용되는 건지, 즉 임베딩을 선형 레이어로 간주해서 역전파로 학습시키는 방식인지 궁금함
임베딩도 일반 역전파 과정에 포함됨, 다만 효율성 때문에 원-핫 인코딩은 실제로 안 씀,
선택된 벡터에만 그래디언트가 흐르도록 인덱싱을 미분 가능하게 구현함,
구체 예시는 내가 만든 미니 딥러닝 라이브러리 SmallPebble 소스 참고하면 도움됨
다른 코멘트를 좀 더 설명하자면,
인덱싱과 원-핫 벡터 곱은 수학적으로 동일함,
예를 들어 vocab이 N개, 시퀀스 길이 L이라면, NxL 희소 행렬을 임베딩 행렬에 곱해야 하는데,
실제론 각 열 당 인덱스 하나만 알면 되므로, 내부적으로는 숫자 하나(인덱스)로 표현함,
이 방식으로 순전파와 함께 역전파 역시 인덱싱 기준으로 별도로 작성해,
선택된 임베딩 벡터로 그래디언트가 흐르도록 처리함