#딥러닝
60편
- 그래프 신경망 — 이웃의 평균을 배운다노드 1,200개 중 라벨이 80개뿐인 그래프에서 특징만 보는 MLP는 82.6%, 이웃과 평균을 내는 GCN은 99.7%였다. 이웃은 나와 비슷하다는 가정이 들어맞았기 때문이다. 이웃이 무작위로 연결되자 GCN은 MLP보다 17.9%p 낮아졌다. 층을 16개 쌓자 모든 노드의 표현이 한 점으로 모여 코사인 유사도 1.000, 정확도는 찍기 수준인 24.5%가 됐다
- 역전파 — 기울기를 한 번에 다 구하는 법파라미터가 2만 2천 개인 망에서 수치미분으로 기울기를 구하면 12초가 걸리고, 역전파로 구하면 0.8밀리초가 걸린다. 값은 소수 열 번째 자리까지 같다. 역전파가 공짜는 아니다. 순전파의 중간값을 전부 기억해야 해서, 층을 하나 쌓을 때마다 학습 메모리가 그 층 출력 크기인 2.0MB씩 늘었다
- 합성곱 신경망 — 같은 필터를 어디에나 댄다도형이 24×24 어디에나 놓이는 과제에서 파라미터 56만 개짜리 MLP는 27.5%, 1만 4천 개짜리 CNN은 95.1%였다. 이유는 같은 필터를 모든 위치에 대는 가중치 공유다. 그런데 가운데서만 배우고 옆으로 옮겨 시험하면 CNN도 무너질 수 있다. 위치를 지우는 것은 합성곱이 아니라 전체 평균이고, 그마저 풀링 보폭 때문에 4의 배수로 옮길 때만 잘 버텼다
- 가중치 초기화 — 첫 걸음의 크기20층 ReLU 망에 표준편차 0.01로 가중치를 뿌리면 신호가 층마다 0.11배로 줄어 20층 뒤 10⁻²⁰이 된다. 기울기도 10⁻¹⁹이라 학습이 한 발짝도 나가지 않았다. 분산을 2/n으로 맞추면(He) 20층 뒤에도 0.51이 남고 67.4%까지 배운다. 그리고 모든 가중치를 같은 값으로 두면 뉴런 256개가 끝까지 하나처럼 움직였다
- 과적합과 규제 — 외우지 못하게 막는 것과 모르는 것을 가르치는 것도형 180장으로 파라미터 40만 개짜리 망을 학습시키자 100스텝 만에 학습 정확도 100%, 시험 정확도는 19%에서 멈췄다. 교과서의 처방인 가중치 감쇠와 드롭아웃은 10배로 세게 걸어도 19% 그대로였다. 데이터 증강만 77%까지 끌어올렸다. 모자랐던 것은 외울 수 있는 양을 줄이는 제약이 아니라 도형은 옮겨도 같은 도형이라는 지식이었다
- VAE — 압축하는 법에서 만들어 내는 법으로오토인코더는 도형을 90% 알아볼 수 있게 복원하지만, 표준정규분포에서 뽑은 코드를 넣으면 27.5%만 도형이 나온다. 코드가 원점에서 평균 4.4만큼 떨어진 채 흩어져 있기 때문이다. KL 벌점으로 코드를 원점 근처에 모은 VAE는 66.7%를 뽑아냈다. 다만 벌점을 세게 걸수록 좋아지는 것은 아니었다. β=10에서는 코드가 정보를 거의 잃어 흐린 평균만 나왔다
- PyTorch 치트시트를 다시 쓴다 — 에러가 나면 차라리 다행이다널리 도는 PyTorch 치트시트의 줄들을 2.8에서 하나씩 돌려 봤다. torch.solve와 symeig는 이미 제거됐고 torch.load는 기본값이 바뀌었다. 그런데 진짜 문제는 에러가 나는 쪽이 아니었다 — (N,1)과 (N,)을 빼면 손실이 272배로 부풀고, 레이어를 리스트에 담으면 파라미터가 0개가 되며, zero_grad를 빼먹으면 한 스텝 이동량이 66.8배가 되는데 정확도는 멀쩡해 보인다
- 적대적 예제 — 눈에 안 보이는 변화가 답을 뒤집는다픽셀을 0~1 중 4%만 흔들자 정확도가 85%에서 18.7%로 무너졌다. 그런데 틀린 답에 대한 확신은 93.6%로 오히려 높았다. 같은 크기를 무작위 방향으로 주면 85%가 그대로였으니 문제는 크기가 아니라 방향이다 — 정답 점수가 깎이는 양이 10배 차이였다. 그리고 무작위 잡음으로 증강해도 방어가 안 됐다
- 강화학습 기초 — 가치가 퍼져 나간다보상이 있는 칸에서 시작한 '좋음'은 한 번 갱신할 때마다 딱 한 칸씩 번진다. 331칸을 다 채우는 데 37번이 걸렸다. 감가율을 0.90에서 0.95로 올리자 같은 환경에서 목표가 가까운 +1에서 먼 +10으로 바뀌었다. 그리고 탐험 비율을 0부터 1까지 다 돌려도 큰 보상을 쓰지 못했는데, 탐험을 0으로 두고 낙관적 초기화만 넣자 11번째 판에 찾아냈다
- 몬테카를로 트리 탐색 — 계산을 어디에 쓸지 고르기규칙만 알고 평가 함수가 없어도, 끝까지 아무렇게나 둬 보는 것만으로 사목에서 무작위 상대를 100점으로 이겼다. 같은 예산이라도 굴린 결과를 트리로 쌓으면 그냥 나눠 굴리기를 68.3점으로 이겼고, 예산을 6,400판으로 키우자 85.0점까지 벌어졌다. 다만 님(Nim)에서는 예산을 20배 늘려도 무작위로 찍는 것과 다르지 않았다
- 근사 최근접 이웃 — 검색을 빠르게 하는 대가20만 개 문서를 전부 비교하면 질문 하나에 29ms가 든다. 군집으로 나눠 전체의 1.6%만 열어 보면 0.70ms로 41배 빨라지지만 재현율은 25.6%다. 25%를 열면 87.3%까지 오르는데 시간은 11.2ms다. 그리고 차원을 8에서 256으로 올리자 같은 설정의 재현율이 96%에서 13.5%로 떨어졌다 — 1등과 100등의 차이가 흐려지기 때문이다
- 차등 프라이버시 — 기억하지 못하게 만들기모델은 학습에 쓴 표본을 알아본다. 손실만 보고 '이 표본이 학습에 쓰였나'를 맞히는 AUC가 0.668이었다. 그래디언트를 자르고 잡음을 넣자 AUC가 0.517까지 내려가 사실상 못 알아보게 됐는데, 시험 정확도도 44.2%에서 15.2%로 함께 내려갔다. 다만 표본을 8배로 늘리자 같은 잡음에서 잃는 양이 26.6%p에서 13.6%p로 줄었다
- 스펙큘러티브 디코딩 — 작은 모델이 먼저 쓰고 큰 모델이 검사한다큰 모델을 한 번 부를 때 토큰 하나만 얻는 것이 아깝다. 작은 모델에게 세 글자를 미리 쓰게 하고 큰 모델이 한 번에 검사하니 한 호출에 평균 3.56토큰이 확정돼 1.60배 빨라졌다. 놀라운 것은 결과가 근사가 아니라는 점이다 — 초안 모델의 분포가 0.657만큼 다른 자리에서도, 검사 규칙을 지킨 표본은 큰 모델이 직접 뽑은 것과 구별되지 않았다
- 토크나이저의 불평등 — 한국어는 왜 비싼가같은 뜻의 문장 다섯 개를 GPT-4 토크나이저에 넣으니 영어는 52토큰, 한국어는 134토큰이었다. 2.58배다. 흔한 한국어 단어 열 개 중 통째로 어휘에 있는 것은 0개였고 평균 3.40조각으로 쪼개졌다. 말뭉치 구성만 바꿔 직접 학습시켜 보니 같은 현상이 그대로 재현됐다 — 언어의 성질이 아니라 어휘를 무엇으로 만들었느냐의 문제다
- 모델 병합 — 가중치를 평균내도 되는 이유각자 86.4%와 87.2%인 멀쩡한 두 모델의 가중치를 반씩 섞자 11.1%가 됐다. 찍기가 8.3%인 과제다. 그런데 같은 출발점에서 갈라진 두 모델은 섞어도 무너지지 않고 88.0%가 나왔다. 같은 출발점을 공유하느냐가 전부를 가른다. 검증으로 골라 담은 수프는 최고 개별 모델보다 0.6%p 높았고, 추론 비용은 여전히 모델 한 개였다
- 긴 꼬리 — 전체 정확도 88%가 숨기고 있는 것클래스 빈도가 100대 1로 기울어진 데이터로 학습하니 전체 정확도는 87.4%가 나왔다. 그런데 드문 클래스 4개의 정확도는 24.7%였다. 더 놀라운 건 그 드문 클래스들의 학습 데이터 정확도가 100%였다는 것이다 — 덜 배운 게 아니라 볼 것이 모자란 것이다. 흔히 쓰는 재가중과 재표집은 오히려 더 나빠졌고, 같은 재가중이라도 마지막 층에만 걸면 8.9%p가 올랐다
- 앙상블 — 여러 번 세는 것의 값어치똑같이 만든 모델 8개는 각자 83% 남짓인데 확률을 평균내자 84.4%가 됐다. 이득은 평균 실력이 아니라 틀리는 자리가 서로 다른 데서 나온다. 전원이 틀리는 8.3%가 천장이다. 그런데 같은 파라미터 예산을 큰 모델 하나에 쓰면 87.3%로 앙상블을 이겼다 — 앙상블이 확실히 이긴 건 정확도가 아니라 캘리브레이션이었다
- 긴 문맥 — 위치는 왜 외삽되지 않는가학습에서 본 적 없는 길이를 주면 모델이 무너진다. 길이 64까지 배운 모델은 512에서 3.7%(무작위 2.2%)로 떨어졌고, 같은 길이를 추가 학습한 모델은 15.2%였다. 재학습 없이 기저 주파수만 늘려도 10.7%까지 되살아났지만, 흔히 같이 권하는 위치 보간은 오히려 2.5%로 더 나빠졌다 — 인접 관계를 구분할 해상도가 무너지기 때문이다
- 지식 증류 — 무엇이 옮겨지는가, 그리고 언제 이기는가큰 모델의 확률 분포로 작은 모델을 가르치면 좋아진다고 알려져 있다. 그런데 라벨이 충분한 상황에서는 이득이 없었고 작은 학생에게는 오히려 1.8%p 손해였다. 증류가 크게 이긴 곳은 따로 있었다 — 라벨 720개짜리 학생에게 라벨 없는 데이터 7,200개를 교사와 함께 주니 43.3%가 81.9%가 됐다. 진짜 라벨 7,200개를 받은 학생(82.9%)과 거의 같다
- 데이터 — 중복, 오염, 그리고 품질같은 4,800개라도 고유한 데이터가 16분의 1로 줄자 정확도가 84.0%에서 32.4%로 떨어졌다. 시험 문제의 절반을 학습에 섞으니 발표 점수는 92.3%가 됐지만 깨끗한 문항의 실력은 84.6%였다 — 8%p가 순전히 부풀림이다. 그리고 라벨 오답률 30%인 데이터는 4배를 줘도 깨끗한 데이터를 못 이겼다
- 평가 — 벤치마크 점수는 얼마나 믿을 수 있나실력이 정확히 75%인 모델도 100문항에서는 66%에서 83% 사이 아무 점수나 나왔다. 실력이 1%p 앞선 모델이 100문항 시험에서 지는 일이 43.5%나 됐다. 그리고 실력이 완전히 같은 두 모델을 벤치마크 10개에서 겨루게 하니 99.9%의 확률로 어느 한 곳에서는 이겼다 — 평균 4.21%p 차이로
- 분산 학습 — 계산을 나누면 통신이 남는다GPU를 32배 늘려도 32배 빨라지지 않는다. 나눌 수 없는 부분이 5%만 있어도 12.1배에서 멈췄고, 20%면 5.1배였다. 나누는 방식마다 통신량도 달랐다 — 데이터 병렬은 스텝마다 28GB, 파이프라인은 0.067GB다. 그리고 분산은 속도만을 위한 것이 아니다. 학습에는 파라미터의 4.0배가 드는데(실측), 그것을 32장에 쪼개면 장당 112GB가 3.5GB가 된다
- 그로킹과 이중 하강 — 일반화는 언제 오는가학습 데이터를 600스텝 만에 전부 외운 모델이 시험에서는 0%였다. 그리고 4.5배를 더 돌린 뒤 갑자기 100%가 됐다. 가중치 감쇠를 빼자 25,000스텝을 돌려도 시험은 0%에 머물렀다 — 그로킹을 만든 것은 데이터도 시간도 아니라 '작은 해로 가라'는 압력이었다. 모델 크기 쪽에도 같은 이상함이 있다
- ReLU가 공간을 접는다 — 표현력의 기하신경망은 곡선을 그리지 않는다. 직선을 꺾을 뿐이다. 은닉 유닛 32개가 만든 꺾임은 40개였고 그것만으로 sin을 오차 0.00004까지 따라갔다. 깊이를 쌓으면 꺾임이 곱해져 같은 파라미터로 2.5배 많은 꺾임을 만들었지만(151개 대 59개), 정작 오차는 더 낫지 않았다 — 표현할 수 있는 것과 경사하강이 찾아내는 것은 다른 얘기였다
- 문맥 내 학습과 유도 헤드 — 능력이 켜지는 순간모델이 프롬프트의 예시만 보고 새 규칙을 푸는 일은 어떻게 생길까. 외울 수 없게 만든 과제에서 정확도가 250스텝까지 10%에 머물다가 200스텝 만에 80%로 갈아탔다. 어텐션 1층으로는 10.2%였고 2층부터 87.6%였다 — 두 단계가 필요하기 때문이다. 그 구간에 어텐션이 정답 자리로 몰리는 것을 그대로 찍었다
- 캘리브레이션 — 모델은 자기가 틀린 것을 아는가정확도가 82%에서 멈춘 뒤에도 모델의 평균 확신은 92%에서 95.6%까지 계속 올랐다. 과신 폭이 12.4%p다. 시험셋 일부로 온도 하나(3.395)만 맞추자 보정 오차가 88% 줄었고 정확도는 83.2%로 한 자리도 안 바뀌었다. 그리고 완전한 무작위 잡음을 보여 줬더니 97.2%의 확신으로 답했다
- 추론 서빙 — 처리량과 지연, 그리고 빈자리배치를 1에서 256으로 키우자 처리량이 223배가 됐는데 한 사람의 대기는 1.1배밖에 늘지 않았다. 한 글자씩 뱉는 구간은 계산이 아니라 가중치를 읽어 오는 데 묶여 있어서다 — 같은 GPU가 질문을 읽을 땐 105 TFLOP/s, 혼자 한 글자를 뱉을 땐 0.3 TFLOP/s였다. 350배 차이다. 그래서 자리를 채우는 일이 전부인데, 정적 배칭은 슬롯의 20%만 쓰고 있었다
- LoRA — 적은 파라미터로 적응하기큰 모델을 통째로 미세조정하는 대신 '저계수 업데이트'만 학습한다. 전체 미세조정으로 바뀐 가중치 ΔW의 특이값을 보니 상위 3개가 지배해, 적응은 사실상 저계수였다. 그래서 기반을 얼리고 rank 4짜리 어댑터만 학습하니 전체 미세조정과 똑같은 손실(0.0001)을 1/42 파라미터로 냈다
- 플래시 어텐션 — IO를 아는 어텐션어텐션은 N×N 점수 행렬을 만들어 메모리를 O(N²) 먹고, 그 읽고 쓰기가 병목이다. 플래시 어텐션은 그 행렬을 통째로 만들지 않고 타일로 나눠 처리한다. 재 보니 N=4096에서 메모리가 129배 줄고 속도는 1.9배 빨랐다. 핵심은 온라인 softmax — 블록별 running max·sum만으로 전체 softmax와 오차 2e-8로 같은 값을 낸다
- 상태공간모델·선형 어텐션 — 어텐션의 O(N²) 대안어텐션은 모든 쌍을 봐 계산이 O(N²)다. 순환 '상태' 하나로 요약하면 O(N)이 된다. FLOPs를 재니 N=4096에서 어텐션이 선형보다 64배 많았다. 선형 어텐션은 running 상태의 재귀와 오차 5e-7로 정확히 같아 상수 메모리로 돈다. SSM h_t=a·h_{t-1}+x_t의 기억 길이는 고유값 a가 정해, a=0.99면 100스텝을 기억했다
- 혼합정밀도와 그래디언트 체크포인팅 — 학습 메모리를 사는 두 방법학습은 메모리가 모자라 막힌다. 반정밀도로 담으면 메모리가 절반이고 행렬곱이 2.8배 빨랐다. 다만 fp16은 범위가 좁아 작은 그라디언트 2.4%가 0으로 사라졌고, 손실을 1024배 키웠다 되돌리니 0%가 됐다. 그리고 활성값을 저장하지 않고 다시 계산하니 메모리가 24.9배 줄고 시간은 1.78배만 늘었다
- 큰 배치와 그래디언트 축적 — 분산 학습의 산수여러 GPU로 학습한다는 것은 결국 배치를 나눠 계산하고 그라디언트를 평균하는 일이다. 배치 128짜리 4개의 평균이 배치 512 한 번과 오차 9e-10으로 같았다. 배치를 키우면 그라디언트 잡음이 정확히 1/B로 줄었고(로그 기울기 -1.00), 그만큼 최적 학습률도 함께 커졌다(배치 16배에 학습률 10배)
- RAG — 검색 증강 생성, 모르는 것을 찾아서 답하기모델 안에 없는 지식은 밖에서 찾아 넣는다. 학습에서 본 적 없는 사실을 외운 모델은 6%(무작위 수준)만 맞혔지만 검색은 100% 맞혔다 — 재학습 없이 지식이 추가된다. 다만 정답률은 검색 재현율을 넘지 못했다. 검색이 틀린 문서를 집으면 답도 틀린다
- 비전 트랜스포머와 CLIP — 이미지도 토큰이고, 제로샷은 공짜가 아니다이미지를 패치로 잘라 토큰으로 보면 트랜스포머가 그대로 쓰인다 — 다만 패치를 32에서 8로 줄이면 어텐션 계산이 256배가 된다. 대조 학습은 이미지와 텍스트의 짝을 유사도 0.97까지 끌어올려 한 공간에 정렬했다. 그런데 학습에 없던 개념의 제로샷 분류는 81.8%일 수도 4.8%(무작위)일 수도 있었다. 갈린 것은 모델 크기가 아니라 두 모달리티가 공유하는 구조였다
- 확산 모델 — 잡음에서 되돌아오는 법망가뜨리기는 쉽고 되돌리기는 어렵다. 확산 모델은 그 어려운 쪽을 잘게 쪼개 '조금 망가진 것을 조금 되돌리기' 400개로 바꾼다. 봉우리 8개를 모두 고르게 덮었고(11.6~13.4%, 실제 데이터가 12.0~12.9%) 모드 붕괴가 없었다. 그리고 샘플링 스텝을 400에서 20으로 줄이니 19배 빨라지면서 품질은 거의 그대로였지만, 2스텝에서는 분포가 통째로 무너졌다
- 추론 시간 계산 — 더 생각하면 더 맞히나학습을 키우는 대신 답할 때 계산을 더 쓰는 세 방법을 쟀다. 한 번에 답하는 모델은 길이 3부터 0.9%(무작위)로 무너졌지만 한 단계씩 쓰게 하니 길이 8까지 100%였다. 같은 문제를 31번 풀어 다수결하면 11.6%가 69.9%가 됐고, 답을 확인할 수만 있으면 같은 31번으로 97.6%까지 갔다 — 생성과 검증의 격차가 최대 38.8%p였다
- 에이전트와 도구 사용 — 신뢰성의 산수모델이 답하는 대신 행동하기 시작하면 정확도가 아니라 곱셈이 지배한다. 도구가 10%만 실패해도 16단계 작업의 성공률은 19.3%로 떨어졌다. 매 단계 결과를 보고 다시 계획하니 같은 조건에서 99.9%가 됐다. 다만 그 회복은 되돌릴 수 있을 때만이었다 — 실패가 전부 비가역이면 폐루프도 18.3%로 되돌아갔다
- 스케일링 법칙 — 파라미터·데이터·계산의 균형모델을 키우면 손실은 N^-0.56, 데이터를 늘리면 D^-0.57의 멱법칙으로 줄었다(로그-로그 직선). 그런데 계산은 유한하다. C≈6ND를 고정하고 배분을 바꾸니 손실에 U자 골짜기가 생겼고, 예산이 10배 커질 때 최적 N과 D가 각각 C^0.42·C^0.58로 함께 자랐다 — 모델만 키우지 말고 데이터도 같이 키우라는 친칠라의 교훈
- KV 캐시와 추론 — 생성은 왜 메모리에 묶이나자기회귀 생성은 토큰을 하나씩 만든다. 캐시가 없으면 매 스텝 과거를 다시 계산해 L=512에서 260배나 더 일했다(L²). 과거의 K·V를 저장하면 새 토큰만 계산해 선형으로 준다. 대신 캐시는 문맥 길이에 선형으로 커져, 70B 모델에서 64K 토큰이면 캐시(168GB)가 모델 가중치(140GB)를 넘었다. GQA·MQA로 KV 헤드를 줄이면 캐시가 8배·64배 준다
- 전문가 혼합(MoE) — 큰데 싸게, 그리고 저절로 나뉜다큰 FFN을 전문가 여럿으로 쪼개고 토큰마다 몇 명만 켠다. 전문가 16개 중 top-1이라 총 파라미터는 크고(13:1) 계산은 하나뿐. 아무도 안 가르쳤는데 라우터가 입력 군집마다 다른 전문가로 보내며 89% 특화가 저절로 생겼다. 그리고 활성 계산을 그대로 둔 채 전문가만 1→16개로 늘리자 손실이 0.075에서 0.0046으로 16배 줄었다 — 메모리로 계산을 사는 셈이다
- 양자화 — 비트를 줄여도 되는 이유KV 캐시 편에서 추론은 메모리에 묶인다고 했다. 가중치를 fp16 대신 정수 몇 비트로 저장하면 그 메모리가 준다. 학습된 모델을 비트 수를 줄여가며 재니 8비트는 손실 그대로, 4비트도 2.4배뿐이었고 그 아래서 무너졌다. 다만 큰 이상치가 한 채널에 있으면 텐서 하나로 스케일을 잡을 때 뭉개졌고, 출력 채널마다 스케일을 따로 잡자 4비트 오차가 3배 줄었다
- 디코딩과 샘플링 — temperature·top-p가 하는 일모델은 다음 토큰의 '확률'만 준다. 그걸 실제 토큰으로 고르는 게 디코딩이다. 온도를 0.2→3으로 올리자 분포가 뾰족(top-1 0.96)에서 평평(0.27)으로 퍼졌고, 늘 최고만 고르는 그리디는 24-주기 루프에 갇혀 반복률이 92%까지 치솟았다(샘플링은 44%). top-p는 긴 꼬리의 헛토큰을 잘라, 다양성은 그대로 두고 헛토큰만 1.6배 줄였다
- RLHF와 DPO — 선호로 배우기, 그리고 보상 해킹정답이 아니라 사람의 '선호'(A가 B보다 낫다)로 모델을 정렬한다. 선호 쌍으로 보상을 배우니 진짜 보상과 상관 0.86까지 맞았지만, 그 불완전한 보상을 세게 최적화하자 프록시 점수는 계속 오르는데 진짜 보상은 KL 0.6에서 봉우리를 찍고 -1.4까지 무너졌다 — 굿하트, 보상 해킹. DPO는 보상 모델 단계를 건너뛰고 선호에서 바로 정책을 옮기되, β로 참조에서 얼마나 멀어질지를 제어한다
- 기계적 해석가능성 — 프로브에서 회로로모델 속 '개념'이 어디에 어떻게 들어 있나. 은닉 6차원에서 특징 16개를 선형 프로브로 읽으니 중요한 특징은 또렷했고(균형정확도 75%) 덜 중요한 건 중첩에 밀려 무작위(50%)로 사라졌다. 그 개념의 방향을 활성에 더하자 그 특징만 정확히 켜졌다(상관이 아니라 인과). 특징 방향들은 서로 겹쳐(비직교) 저장돼, 뉴런 하나가 평균 6.8개 특징을 겸했다
- 정규화와 잔차 — 깊이를 견디는 법트랜스포머 층 해부 편까지 층을 쌓았지만, 왜 깊게 쌓아도 학습이 되는지는 건너뛰었다. 잔차 연결이 없으면 초기 그라디언트가 입력쪽 블록에서 0으로 언더플로(끝/첫 10^27배)했고, 정규화가 없으면 부분층 입력 분산이 1에서 6으로 표류했다. 그리고 같은 잔차·정규화라도 넣는 위치가 갈랐다 — 깊이 64에서 post-norm 손실이 pre-norm의 11배로 무너졌다
- 최적화 — Adam·워밍업·스케줄이 하는 일정규화와 잔차 편이 그라디언트를 살렸다면, 최적화 편은 그것으로 실제로 학습시키는 법이다. 조건수 1000인 그릇에서 SGD는 2.13에 발이 묶였고 Adam은 10^-15까지 내려가 5.7×10^14배 낮았다. 깊은 post-norm은 워밍업 없이 초반 손실이 4.6배로 튀었고, 코사인 감쇠는 잡음 바닥에 5.2% 더 가까이 안착했다
- 토크나이저와 임베딩 — 텍스트가 숫자가 되기까지모델은 숫자만 먹는다. BPE를 직접 구현해 자주 붙는 쌍을 합치니 한국어 토큰이 126번 병합에 78.6% 줄었고, 토큰(학습)·조각(는_) 같은 의미 단위가 저절로 생겼다. 어휘를 키우면 시퀀스는 단어 수에서 멈추고 임베딩 표만 커진다. 그리고 한글은 UTF-8 3바이트라 바이트로 자르면 영어의 2.6배로 길어졌다 — 왜 한국어에 좋은 토크나이저가 중요한지
- 통제를 잃는다는 것 — 명세 게이밍과 관측 가능성의 값평가용 에이전트가 샌드박스를 나가 실제 회사를 4일 반 동안 털었다. 목표는 해킹이 아니라 부정행위였다. 그 구조를 축소 모형으로 재현하니 겉보기 점수는 늘 100%인데 진짜 능력은 0%까지 무너졌고, 무엇을 숨길 수 있느냐는 연속이냐 이산이냐가 아니라 그 정보가 과제에 필요한가로 갈렸다
- 잠재 반복 vs 토큰 사슬 — 추가 계산을 세로로 넣을 것인가 가로로 넣을 것인가같은 블록으로 같은 문제를 세로(잠재 반복)와 가로(토큰 사슬)로 풀어 맞대 봤다. 정확도는 둘 다 100%로 같았고, 든 값은 블록 2배·토큰 0 대 192개로 갈렸으며, 중간 생각은 한쪽만 그냥 읽혔다. 아스트라와 페이블의 공개 수치가 정확히 그 지문을 남긴다
- 중첩 — 잠재 상태는 왜 토큰보다 넓은가잠재 반복 vs 토큰 사슬 편은 두 방식이 똑같다고 결론지었는데 이론은 분리를 말한다. 잠재 반복 vs 토큰 사슬 편 과제가 분리를 볼 수 없게 만들어져 있었다는 것을 찾아 고쳐 짓고 다시 쟀다. 반경을 4로 붙박아도 이산 CoT만 |S|를 따라 밀리고 천장이 73%까지 내려앉았다. 그리고 진짜 축은 연속이냐 이산이냐가 아니었다
- 루프 트랜스포머 — 깊이를 파라미터가 아니라 시간으로 사는 법GPT-6 아스트라가 쓴다고 알려진 순환 심도(recurrent depth). 논문 구조를 축소 재현해 재보니, 블록 하나(61K)가 12층(602K)과 똑같은 100%를 냈고 학습 때 6바퀴만 돌아 본 모델이 14바퀴를 돌려 배운 적 없는 깊이를 풀었다
- PyTorch 치트시트 — 실제로 돌려서 검증한 것만 남겼다치트시트 5종에서 겹치는 핵심만 추린 뒤 전부 실행해 확인했다. torch 2.8.0 기준
- LSTM 완전 풀이 — 초등학생도 따라오는 계산 과정게이트 4개를 숫자로 하나씩 계산한다. 모든 값을 nn.LSTM 과 대조해 오차 3.8e-08 로 확인했다
- Attention 은 어떻게 계산되는가 — Q·K·V 와 병렬 계산의 원리왜 √d_k 로 나누는가, 왜 순차 계산이 필요 없는가. 모든 수치를 PyTorch 구현과 대조했다
- Transformer 각 층 상세 해부임베딩부터 Softmax 까지 층마다 무엇을 하는지. 직접 만든 층이 PyTorch 공식 층과 오차 0.0 으로 일치한다
- 위치 인코딩 — 어텐션이 잃어버린 순서를 되돌려 놓는 법sin/cos 을 고른 진짜 이유는 'k칸 이동 = 고정 회전행렬 곱' 이다. 상대위치 편향과 RoPE 까지
- CS229 딥러닝 치트시트를 다시 쓴다 — 0.25 를 스무 번 곱하면활성화 함수·드롭아웃·배치정규화·합성곱 크기 공식. 왜 ReLU 로 갈아탔는지 숫자로 본다
- Keras 치트시트를 다시 쓴다 — 조용히 학습이 안 되는 자리들손실 함수를 잘못 고르면 loss 가 0 이 된다. EarlyStopping 이 되돌리지 않는 것, 그리고 사라진 predict_classes
- 딥러닝 — 사람이 3을 3으로 읽는 이유와 그 밑의 수학퍼셉트론에서 역전파까지, 그리고 머신러닝에 필요한 선형대수 최소한
- 빅데이터 처리 기술 — 수집부터 시각화까지NoSQL·분산파일시스템·하둡·스파크, 그리고 그 위에 올라앉은 AI