A.1.1 · 분할 모형의 속내
UnLoc — 공개 구현이 없어 다시 지었다
UnLoc은 공개 구현이 없어 직접 재구현했다. 행동 분할 변형에는 구조의 일부만 쓰이므로
특징 피라미드와 경계 헤드는 덜어냈다. 남은 것은 CLIP(RN50)으로 새긴 관측과
CLIP으로 새긴 지시를 더해 3층·8헤드·입력 1024·은닉 2048·드롭아웃 0.2의 트랜스포머 인코더에
넣고 관련성 헤드로 내보내는 얼개다 — 위치 인코딩은 두지 않았다.
주석 토막은 좌우로 무작위 오프셋을 뽑아 증강한다.
절단 요령 — 시험 때 훈련과 같은 크기의 창을 플레이 궤적에서 무작위로 뽑아
프레임별 라벨을 얻고, 앞뒤에 잇달아 붙은 배경 라벨을 잘라낸다.
그 토막은 프레임 라벨이 모두 일치하고 그 라벨이 배경이 아닐 때에만 곳간에 들인다.
훈련 곳간의 토막 길이를 보아 최소 크기도 정해 둔다.
A.1.1
TriDet — 공식 구현을 그대로, 라벨링 모형의 마지막 층으로 새겨
공식 구현을 쓴다. 관측은 라벨링 모형(I3D) 마지막 층의 표현으로 새기는데,
25% 분할로 TriDet을 기르면 라벨링 모형도 같은 25% 분할로 기른다 — 정보가 새지 않도록 하는 조심이다.
훈련 때는 주석 토막 좌우로 무작위 오프셋을 뽑아 고정 크기 창을 만든다.
절단 요령 — 특징 피라미드에서 분류 확신이 가장 높은 프레임을 골라,
그에 딸린 예측 구간을 토막으로 삼고 라벨을 붙인다. 최소 크기에 못 미치는 토막은 걸러낸다.
A.1.1
플레이 분할(PS) — 시간 합성곱 위의 두 머리
TriDet처럼 관측을 먼저 라벨링 모형으로 새긴 뒤, Conv1D + 층정규화 + ReLU의
시간 합성곱을 N번 쌓고(BabyAI N=2, CALVIN N=3) 그 위에
라벨 머리와 분할 머리를 나란히 얹는다 — 몸통은 나눠 쓰고 머리만 둘인 얼개다.
분할 알고리즘은 Sharma 등의 재귀를 이 형편에 맞춰 고친 것인데,
결정적으로 다른 데가 있다 — 궤적을 몇 토막으로 갈라야 하는지를 미리 알지 못한다는 점이다.
하여 시점 t까지 K토막으로 가른 최적해를, 그 이전 시점들의 K−1토막 최적해와 마지막 토막의 우도로
되짚어 찾는다.
알고리즘 1 — 최적 분할의 동적 계획법
입력 o₀:T, p_θSeg
S_ij ← −∞ (i,j ∈ 1..T) · S_ij = 시점 j까지 i개 구간으로 가른 최적 분할의 로그우도
p^Seg_ij ← p_θSeg(α_j = 1 | o_i:j+1)
S_1k ← Σ_{t=0..k−1} log(1 − p^Seg_0t) + log(p^Seg_0k)
for i = 2 .. T for k = i .. T for l = i−1 .. k
S_ik ← max{ S_ik , S_{i−1,l} + Σ_{t=l+1..k−1} log(1 − p^seg_lt) + log(p^seg_lk) }
반환 max_{i∈1..T} S_iT
· 토막의 최소·최대 창 크기를 정해 두면 셈을 줄일 수 있다.
A.1.2–A.1.3 · 정책과 라벨링 모형
정책을 기르는 손질
CALVIN — 벤치마크와 함께 공개된 MCIL 구현을 따르되,
RNN 정책 블록을 6층·문맥창 4의 트랜스포머 인코더로 갈아 끼웠다.
학습률만 손보고 나머지 하이퍼파라미터는 구현의 값을 그대로 두었다.
BabyAI — Hui 등의 구현을 따르되 지시를 GRU로 새기지 않고
T5 인코더 변형의 마지막 은닉층에서 얻은 문장 임베딩을 FiLM 층에 곧바로 먹인다.
환경이 완전 관측이므로 LSTM 부품은 덜어냈다.
하이퍼파라미터는 손으로 조절하며 전체 주석 곳간에서의 평가 성적을 보아 골랐다.
라벨링 모형 — 지시–궤적 쌍 곳간 위에서 I3D 구조의 영상 분류기를
PySlowFast 구현으로 기른다. 하이퍼파라미터는 검증 성적이 흡족할 때까지 손으로 맞췄다.
공장기 一 — 제2권 모형들의 살림살이(표 A.1–A.5 발췌). 학습률은 모두 5e-5~1e-4 사이에 놓였다.
| 모형 | BabyAI 갱신 | BabyAI 시간 | CALVIN 갱신 | CALVIN 시간 | 기계 |
| TriDet | 2,000 | 1.5시간 | — | 5시간 | A100 40GB / GTX 1080 Ti |
| 플레이 분할(PS) | 3,000 | 1시간 | 12,000 | 14시간 | A100 40GB / 2×H100 90GB |
| 모방학습 정책 | 20,000 | 20분 | 45,000 | 18시간 | GTX 1080 Ti / A100 40GB |
| I3D 라벨링 모형 | 8,000 | 1시간 | 32,000 | 6.5시간 | A100 / 4×A100 |
토막 크기의 하한과 상한도 환경마다 달리 두었다 — BabyAI는 최소 1·최대 25스텝, CALVIN은 최소 20·최대 100스텝이다.
두 세계의 시간 감각이 이만큼 다르다는 것을 이 두 줄이 말해 준다.
A.2.1 · 환경
여덟 몸을 빚기 위해 늘린 행동의 목록
공식 BabyAI 구현을 손보아 행동의 폭을 넓혔다. 표 A.6에는 0번부터 18번까지가 적혀 있다 —
좌회전·우회전·전진·집기·놓기·조작·완료의 일곱에 더해,
대각 좌·대각 우, 오른쪽·아래·왼쪽·위로 이동, 180도 회전,
좌우 대각 후진, 몸 틀지 않고 좌·우 이동, 후진이 붙었다.
시연은 BabyAI 봇이 몸마다 따로 지어 주었다.
단독 에이전트 곳간의 크기는 세상마다 다르다 — GoToObj 1,494 / GoToDistractor 90,000 /
GoToDistractorLarge 25,000 궤적이다. 큰 세상의 궤적은 시점이 더 많으니
한 궤적에서 뽑아낼 수 있는 지시–부분수열 쌍이 더 많다 —
그래서 궤적 수가 적어도 밥상이 성립한다.
A.2.2 · 학습
확산 과정은 Karras의 것을 그대로, 표집은 64걸음
Karras 등의 구현을 고쳐 에이전트 정보 조건화를 감당하게 했고,
확산 과정의 하이퍼파라미터는 세 세상 모두에서 같은 값으로 고정했다 —
σ_min 0.002, σ_max 80, σ_data 0.5,
ρ 7, P_mean −1.2, P_std 1.2다.
표집 걸음은 64로 두었다 — 더 늘려도 추가 계산을 치를 만한 성적 향상이 없었다.
역동역학 모형은 작은 에이전트별 곳간에서 기른다. 두 관측을 채널 방향으로 잇대
잔차 연결이 있는 합성곱 블록에 넣고, 모든 픽셀에 걸쳐 평균 풀링한 뒤
선형층을 거쳐 교차 엔트로피로 배운다.
모방학습 기준선들은 Hui 등의 구조를 따르되, 완전 관측 변형에서 학습하므로
LSTM 부품을 덜어냈다. 모두 검증 곳간에서 행동 예측 정확도가 수렴할 때까지 길렀다.
A.3.1 · 족보 캐기
세 그래프에서 족보를 캐는 세 가지 손놀림
먼저 게임에 나올 만한 물건의 목록이 있어야 한다. 무작위 플레이로 궤적을 모아 상태마다 물건을 골라내는데,
Wordcraft는 상태가 곧 물건의 집합이라 손댈 일이 없고, Textworld는 상태가 글이니
spaCy로 품사를 붙여 명사를 모두 물건으로 삼는다.
WordNet — 명사 사이의 상위어(hypernym)를 상위부류로 본다. NLTK로 신셋과 상위어를 물어,
물건마다 entity 신셋에 닿을 때까지 거슬러 올라 사슬을 얻고, 여러 사슬에 겹쳐 나오는 상위부류를
한 마디로 합쳐 나무를 세운다. 걸리는 데가 개체 정합이다 — 뜻이 여럿인 낱말에서 어느 신셋을 고를 것인가.
여기서는 맨 처음 돌아온 신셋을 그냥 취했다(더 정교한 방법도 가능하다). 신셋이 없는 물건은
"entity"를 부모로 둔다.
DBpedia — SPARQL로 물건 이름을 rdfs:label로 갖는 URI를 먼저 찾는다.
온톨로지에 속한 URI가 있으면 rdfs:subClassOf를, 없으면 rdf:type을
owl:Thing에 닿을 때까지 거슬러 오른다. URI에 사상되지 않는 개체는 곧바로 owl:Thing에 붙인다.
ConceptNet — API로 IsA 관계를 묻는다. 여기서 두 탈이 난다.
하나는 같은 뜻의 부류가 서술만 조금씩 달리하여 여럿 붙어 있다는 것 —
비행기가 "공기보다 무거운 기체", "항공기", "고정익 항공기"에 죄다 이어져 있으니, 하나만 뽑으면
같은 부류의 물건들이 뭉쳐지지 않는다. 다른 하나는 일반 부류에 닿을 때까지 거슬러 오르면
나무가 감당 못 하게 커지고, IsA에 순환이 있어 멈춘다는 보장도 없다는 것이다.
앞의 탈은 부류를 집합으로 두고 임베딩을 평균해 달래고, 뒤의 탈은
IsA의 두 걸음 이웃까지로 제한해(곧 추상화 켜가 둘) 막았다. 덧붙여
가중치가 1 이상인 IsA만, 서술이 세 낱말 이하인 부류만 취했다.
공장기 二 — 캐낸 족보의 됨됨이(표 A.12). 결손 개체는 그래프에서 짝을 못 찾은 개체 수이며, 켜 수에는 기저 층을 넣지 않았다.
| 환경 · 그래프 | 결손 개체 | 켜 수 |
| TWC · WordNet | 2 / 148 | 9 |
| TWC · DBpedia | 2 / 148 | 6 |
| TWC · ConceptNet | 6 / 148 | 2 |
| Wordcraft · WordNet | 13 / 700 | 16 |
숫자가 말해 주는 바가 있다. DBpedia는 결손이 WordNet과 같은 둘뿐인데도 본문에서 배움을 가장 크게 막았으니,
탈은 못 찾은 개체가 아니라 잘못 찾은 개체에 있었던 것이다.
ConceptNet의 켜가 둘뿐인 것도 위 손놀림에서 스스로 잘라낸 결과다.
A.3.2 · 가치 기반으로 옮기면
잔차 Q-학습 — 본문이 미뤄 둔 갈래
본문 4장은 정책 경사에 집중했으나, 부록은 같은 발상을 Q-학습으로 옮긴다.
합 공법은 로짓 대신 행동 가치를 켜마다 더하면 그대로 확장된다.
(A.1) Q(s_t, a) = Σi=1..n NNθi(s_i, a)
Q(s,a) = E[ Σt γt R1,t ] = E[ Σt γt Σi (Ri,t − Ri+1,t) ] = Σi Qresi(si,t, si+1,t, a), Rn+1 ≡ 0
Qresi ← (1−α)Qresi + α( Ri − Ri+1 + γ maxa Qresi )
(A.2) Ri+1 ≈ Qi+1(si+1,t, a) − γ Qi+1(si+1,t+1, a)
켜마다의 잔차 가치함수가 배우는 것은 윗켜의 행동 가치를 어떻게 손볼 것인가이며,
그 정보의 차이는 두 켜의 보상 함수의 차 R_i − R_{i+1}로 나타난다.
이는 잔차 MDP M_i^res = (S_i × S_{i+1}, A, R_i^res, T_i^res, γ) 위의 Q-학습으로 볼 수 있다.
그런데 갱신 규칙을 곧바로 쓸 수 없다 — 한 전이에는 두 보상 함수의 표본이 하나씩뿐이니
그 차가 늘 0이 되어 버린다. 상태마다 보상의 평균을 지니는 것은 고차원에서 어불성설이므로,
윗켜의 현재·다음 상태 행동 가치의 차로 R_{i+1}을 어림한다(식 A.2).
고차원으로 키우는 데는 DQN의 손질을 그대로 쓸 수 있다.
장난감 환경의 결과는 정책 경사에서 본 바를 되풀이한다 — 잡음도 애매함도 없으면
잔차와 합이 완벽한 추상화를 준 것만큼 효율적으로 배우고 일반화한다.
애매한 형편에서는 합 공법이 옳은 켜에서 가치를 배우지 못해 일반화가 처지고,
잡음이 섞이면 둘 다 처지되 잔차가 잡음에 덜 흔들린다.
더 복잡한 환경에서 잔차 Q-학습을 시험하지는 않았다 —
선행 연구에서 정책 경사 계열이 더 나은 성적을 보였기 때문이다 [Murugesan 2021].
A.3.3–A.3.5 · 장난감 환경, Wordcraft, 그리고 시간
가지 수를 손으로 돌려 형편을 만들다
장난감 환경의 나무는 가지 수(branching factor)로 형편이 갈린다 —
기본과 잡음 형편은 [7, 10, 8, 8]이고, 애매 형편은 마지막 자리를 1로 바꾼
[7, 10, 8, 1]이다. 마지막 켜가 상태 하나만 묶으니, 뭉뚱그리는 바 없는 켜가 생기는 것이다.
정책은 REINFORCE로, 가치함수를 기준선 삼고 엔트로피 정칙화(β)를 걸어 기른다.
가치망은 128 크기 1층 MLP, 정책망은 (256, 128, 64)의 3층 MLP이며,
추상화가 있으면 정책망을 켜마다 따로 복제해 NNθi를 매개변수화한다.
Wordcraft에서는 상태 텐서에 추상화 켜를 뜻하는 차원을 하나 더하고
가중치에도 그 차원을 주어 배치 행렬곱으로 처리하면 흔한 MLP도 그대로 쓸 수 있다.
격자 탐색으로 고른 값은 잔차·합 공법 모두 학습률 0.0001, β = 0.1이며,
부류 계층의 9–15번 켜는 접었다. 기준선은 학습률 0.001을 썼고,
못 본 목표 조건에서 GloVe 기준선만 0.0001로 낮춰야 했다.
본문에서 GloVe가 부류 추상화를 앞선 그 결과에는 뒷이야기가 있다.
Wordcraft의 물건은 부류 규칙을 따라 엮이는 일이 드물고, 낱말 임베딩은 부류보다 결이 고운 의미를 담는다.
그렇다면 임베딩이 훈련에서만 통하는 허울 좋은 상관을 물고 있을 수도 있다.
이를 캐려고 목표 개체의 10%만 훈련에 넣는 궁핍한 형편(본디 80%)을 만들어 보았다.
과연 모두 성적이 떨어졌으되 낙차는 무작위 임베딩 + 추상화 쪽이 훨씬 작았고,
일반화의 순위가 뒤집혀 GloVe 기준선이 꼴찌로 내려앉았다.
부류라는 사전 지식이 과적합에 덜 무른 물건임을 이 반전이 말해 준다.
정책이 정말 족보를 부리는지 눈으로 확인한 대목도 있다. Wordcraft에서 비행기는 새와
기계에 가까운 무엇을 엮어 만드는데, 부류 규칙을 따르는 조합을 골라 정책을 그려 보니
아홉째 켜에서 "척추동물과 기계를 엮어야 한다"는 것을 알아보고 옳은 행동을 고른다.
끝으로 시간의 계산이다. 표본 효율이 좋아졌다는 말은 흔히 계산 부담을 늘린 대가로 얻어지니,
표집이 병목이 아닌 환경에서는 같은 시간을 주었을 때도 더 나은가를 따로 물어야 한다.
Intel Xeon W2255와 RTX 3080의 워크스테이션에서 한 시점당 걸리는 시간을 여러 씨앗에 걸쳐 재어
시간축 위에 보상을 그려 보니, 기준선과 잔차 공법이 고정 시간 뒤 같은 보상에 이른다.
곧 계산 시간이 문제일 때에도 잔차 공법은 기준선보다 더 걸리지 않으면서 일반화는 낫다.
A.4.1–A.4.2 · 데이터 모형과 학습
768차원 임베딩 위에 얹은 단정한 두 모형
문맥 없는 모형은 SPECTER2의 768차원 임베딩을 받아 은닉 256의 MLP로 내보내는
단정한 얼개다. 임베딩에 드롭아웃 0.3을 걸고,
학습률 [1e-4, 1e-3, 5e-4, 5e-5]와 드롭아웃 [0, 0.1, 0.2, 0.3, 0.4, 0.5]에 걸쳐
격자 탐색해 검증 성적으로 골랐다. 100 에폭을 돌린 뒤
검증 손실이 가장 낮은 지점의 체크포인트로 시험한다.
문맥 모형은 머리 하나·ReLU·드롭아웃 0.3·은닉 1024의 트랜스포머 인코더 한 층이다.
논문 표현과 문맥을 잇대 이 층을 지나게 하고, 나온 논문 표현을 문맥 없는 모형과 같은 MLP에 넘긴다.
하이퍼파라미터 탐색과 학습은 같은 방식이다. 두 모형 모두 RTX 3080(10GB)에서 최대 20분이면 끝난다 —
이 답사에서 가장 값싼 연장이 가장 나은 성적을 냈다는 사실이 여기 적혀 있다.
A.4.3 · 곳간을 모으는 일의 실상
학회마다 열어 주는 문이 다르다
곳간에 들일 수 있는 것은 심사평과 결정이 공개된 투고뿐인데, 그 개방의 폭이 학회마다 다르다 —
ICML은 심사평도 결정도 주지 않고, NeurIPS는 채택된 논문의 심사평만 주며, ICLR은 모든 투고를 열어 준다.
그래서 곳간의 큰 몫이 ICLR에서 오고 그 다음이 NeurIPS다.
학회마다 심사 항목을 손으로 대응시켜 제안한 스키마에 옮기고, 결정과 결정문도 함께 뽑았다.
채택된 투고는 Semantic Scholar에서 인용 수와 영향력 인용 수, 그리고 참고문헌을 끌어오고,
거절된 투고는 GROBID 파싱에서 참고문헌을 뽑아 Semantic Scholar 말뭉치에 맞춰 정보를 채웠다 —
거절된 논문에도 값이 있다는 판단이다. OpenReview가 계속 커지고 있으니
곳간도 주기적으로 갱신할 계획이라 적어 두었다.
ICLR-2023 한 학회의 심사 항목만 보아도 추천 등급·확신도·정확성·경험적 참신성과 중요성·기술적 참신성과 중요성·
윤리 검토 표식·심사 요약·명료성과 질과 참신성과 재현성·강점과 약점·논문 요약의 열 가지가 늘어선다.
이런 것들이 학회마다 다른 이름과 다른 눈금으로 흩어져 있었으니, 한 서식으로 모으는 일이
곧 이 장의 절반이었던 셈이다.
A.4.4 · 절 분류기
제목의 동의어를 모아 라벨을 짓다
논문의 부위를 골라 쓰려면 단락마다 어느 절인지 가려야 한다. 그 곳간을 짓는 요령이 슬기롭다 —
학술 논문의 제목에 흔한 절 이름의 동의어 목록을 먼저 정하고,
두 곳간을 훑어 제목이 그 목록에 맞는 절들을 라벨과 함께 모은 것이다.
이를테면 배경에는 "Background · Related Work · Historical Review"가,
실험및결과에는 "Experiments · Results · Experimental Design · Empirical Evaluation ·
Ablation Studies · Evaluation"이, 결론에는 "Conclusion · Conclusion & Discussion ·
Conclusion and Outlook · Further Work · Discussions and Future Directions"가 묶인다.
분류기는 단락을 NLTK로 문장에 나누고, SPECTER2로 문장마다 임베딩을 얻어(토큰 임베딩의 평균)
드롭아웃 0.3·은닉 1024·8헤드의 트랜스포머 인코더 두 층을 지나게 한 뒤 평균해 선형층으로 내보낸다.
곳간은 7 : 1.5 : 1.5로 갈랐고, 시험 정확도는 4씨앗 평균
ACL-OCL 0.921 ± 0.006, OpenReview 0.93 ± 0.1이다.
A.4.5 · 가설 주석과 그 검증
제1저자에게 제 논문의 주석을 채점받다
연구 가설은 문제와 해법의 두 짝 h = [p, s]로 모델링하되,
선행 연구와 달리 실험 설계는 가설에 넣지 않았다.
주석은 gpt-3.5-turbo에 한 예시만 넣은 프롬프트(one-shot)로 얻었는데 —
문맥창이 16,000 토큰뿐이고 논문 본문이 길어 예시를 늘릴 수 없었으며, 비용을 아끼려
더 좋은 모형을 쓰지 않았다고 정직히 적어 두었다. 프롬프트는 스스로에게
"논문이 파고드는 가설을 주석하는 박사과정생"의 역을 주고
명료성·완결성·용어·간결성의 네 요건을 걸었다.
그 주석이 논문의 요체를 잡았는지 확인하는 방법이 이 부록에서 가장 미더운 대목이다 —
제 논문의 주석을 그 논문의 제1저자에게 채점받았다.
박사과정생과 조교수 13명이 32개의 연구 가설을 문제와 해법 각각의
정확성·정밀성·완결성 여섯 눈금(5점 리커트)으로 평했다.
문제 · 정확성4.125 (1.083)
해법 · 정확성4.125 (1.293)
문제 · 정밀성3.688 (1.158)
해법 · 정밀성3.906 (1.042)
문제 · 완결성3.563 (1.144)
해법 · 완결성3.625 (1.192)
읽히는 바가 또렷하다 — 대체로 옳으나 완결성이 처진다. 곧 틀린 말은 하지 않되
빠뜨린 것이 있다는 뜻이다. 저자들이 손봐 준 개선본과 나란히 놓아 비교까지 실었고,
GROBID 파싱의 오류가 입력 텍스트를 해쳤을 수 있다는 단서도 달아 두었다.
A.4.6–A.4.8 · 덧붙인 결과들
주제 모형, 심사평의 대조, 그리고 섀플리
주제 모형 — 인용 예측은 분야별 분류기에서 이득을 본다고 알려졌으나,
학술 데이터베이스의 분류는 결이 너무 거칠다 — Semantic Scholar는 OpenReview 투고를 거의 다
"컴퓨터과학"으로, arXiv는 "cs.AI"로 묶어 버린다. 그래서 LDA로 라벨을 붙였다.
제목과 요약을 한 문자열로 이어 gensim과 nltk로 토큰화·표제어화하고,
학술 문체에 흔한 바이그램·트라이그램까지 만들어 넣었으며,
주제 수는 ICLR-2023의 항목 수와 같은 13으로 두었다.
빈번한 다섯 주제의 으뜸 낱말들은 이렇다 —
① 데이터·분포·표본·일반화, ② 적대적·공격·강건성·프라이버시, ③ 신경망·함수·기울기·행렬,
④ 그래프·트랜스포머·어텐션·노드, ⑤ 인과·공정성·게임·트리다.
심사평의 대조 — ICLR-2024 투고 하나를 놓고 Sakana의 심사평과 사람의 심사평을 나란히 실었다.
사람 쪽은 텍스트-투-이미지 확산 모형의 인간 관련 편향을 다룬 그 논문의 공정 사상(fair mapping) 모듈이
얼어 둔 텍스트 인코더 위에서 어떻게 학습되는지, 두 손실 항 가운데 텍스트 일관성 손실이
의미의 정합을 어떻게 지키는지까지 짚는다. LLM 쪽은 방법이 모형에 무관하고 가볍다는 식의
어느 논문에나 붙일 만한 말에 머문다. 점수의 상관이 약했던 까닭이 이 대조에 다 들어 있다.
섀플리 값 — 네 폭의 그림으로, 심사 점수 모형과 인용 점수 모형이
제목·요약을 볼 때와 연구 가설을 볼 때 각각 어느 구절에 무게를 싣는지를 예시로 보인다.
본문 §5.5.4의 그 관찰 — 제목·요약 모형은 결과를 자랑하는 표현에, 가설 모형은 방법과 주제에
무게를 싣고, 몇몇 구절은 두 점수에 서로 반대로 기여한다는 것 — 의 근거가 여기 있다.
부록을 다 읽고 나면 본문의 문장들이 달리 읽힌다.
"라벨 데이터를 두 배 가진 것보다 낫다"는 한 줄 뒤에는 A100에서 돌린 열네 시간이 있고,
"잘못 엮인 족보는 해롭다"는 한 줄 뒤에는 맨 처음 돌아온 신셋을 그냥 취했다는 고백이 있고,
"단순한 모형이 LLM을 앞선다"는 한 줄 뒤에는 RTX 3080에서 스무 분이라는 겸손한 숫자가 있다.
부록은 결론의 각주가 아니라 결론이 서 있는 주춧돌이다.
— 별책부록을 덮으며