모델을 학습시킨다는 건 "이걸 넣으면 이게 나와야 한다" 를 수백 번 보여 주는 일입니다. 옷 사진을 넣으면 그 옷을 입은 사진이 나와야 한다, 이걸 계속 보여 주면 모델이 그 규칙을 익힙니다.
그 한 건에 들어가는 게 셋입니다.
들어가는 것
예
넣을 이미지
옷을 펼쳐 놓고 찍은 사진 (여러 장일 수도 있습니다)
나와야 할 이미지
그 옷을 사람이 입고 찍은 사진 한 장
문장
이게 무슨 옷이고 어떻게 입고 있는지를 적은 글
앞의 둘은 당연한데 세 번째가 왜 필요한지가 안 와닿을 수 있습니다. 이미지 두 장만 주면 모델은 둘 사이에서 무엇을 배우라는 건지 모릅니다. 옷 모양을 배우라는 건지, 배경을 배우라는 건지, 자세를 배우라는 건지 알 수 없습니다.
그래서 글로 같이 적어 줍니다.
·
한 건에 붙는 문장
wide-leg pants, cropped, beige twill, front pleats, belt loops,
worn by the person, full body, plain background
이 글이 나중에 그 모델한테 말을 걸 때 쓰는 말이 됩니다. 학습할 때 통 넓은 바지를 wide-leg 라고 부르며 가르쳤으면, 나중에도 그렇게 불러야 알아듣습니다. 두 번째 편이 이 말을 무엇으로 정할지에 대한 이야기였습니다.
그리고 문장 맨 앞에 아무 데도 안 쓰이는 단어를 하나 박아 둘 수 있습니다. 브랜드 이름 같은 것입니다.
·
앞에 단어를 하나 박은 문장
<브랜드이름> wide-leg pants, cropped, beige twill, front pleats,
worn by the person, full body, plain background
이렇게 학습시켜 두면 그 단어를 넣었을 때만 배운 게 나옵니다. 안 넣으면 원래 모델 그대로 동작합니다. 스위치가 하나 생기는 셈입니다.
그래서 학습을 시작하기 전에 먼저 정해야 하는 게 있습니다.
어떻게 만들 것인가
결과
범용 — 단어를 안 박음
모델 전체가 그쪽으로 물듭니다. 아무 옷이나 다 그렇게 나옵니다
특화 — 단어를 박음
그 브랜드를 부를 때만 켜집니다. 평소엔 원래대로입니다
브랜드를 학습시킬 때는 당연히 뒤쪽입니다. 한 브랜드를 배웠다고 다른 브랜드 옷까지 그 느낌으로 나오면 못 씁니다.
이 단어를 몇 개로 가를지도 같이 정합니다. 하나로 묶으면 편한데, 성질이 반대인 것들을 한 단어에 몰아넣으면 그 중간이 나옵니다. 폭이 넓은 옷과 몸에 붙는 옷을 같은 단어로 가르치면 둘 다 아닌 어중간한 게 나옵니다. 앞 편에서 본 "레귤러 핏" 과 같은 모양입니다.
그리고 이 문장을 사람이 처음부터 다 쓰지는 않습니다. 옷 사진을 AI 에 주고 "이 옷을 설명해라" 라고 시켜서 초안을 받은 다음, 그걸 고쳐서 씁니다. 수백 장에 하나씩 손으로 쓰는 건 못 합니다.
여기까지가 재료입니다. 이미지 짝과 문장, 이 세 개 묶음이 몇백 개 모이면 학습을 한 번 돌릴 수 있습니다. 이 글은 그걸 만들고 돌리는 도구를 어떻게 설계했는지에 대한 것입니다.
01 · Two Hands
사람과 에이전트가 같이 돌립니다
학습 한 번에는 손이 많이 갑니다. 이미지를 모으고, 어떤 사진끼리 한 벌인지 묶고, 문장을 붙이고, 조건을 정하고, 돌리고, 나온 것을 봅니다.
이 중에서 사람이 반드시 해야 하는 건 둘뿐이라고 봤습니다.
누가
무엇을
사람
돈이 나가는 순간 승인 · 결과 판정
에이전트
데이터셋 만들기 · 실험 설계 · 실행 · 감시
운영 문서에 이렇게 적어 뒀습니다. "승인 전에 GPU 를 켜지 마라. 판정을 대신하지 마라. 나머지는 네가 한다."
사람이 빠지고 기계가 다 하는 구조가 아닙니다. 한 학습을 둘이 나눠 잡고 갑니다. 에이전트가 재료를 만들어 이렇게 돌리자고 가져오고, 사람이 돌릴지 말지를 정하고, 에이전트가 돌리고 지켜보고, 나온 것을 사람이 봅니다.
사람 몫을 이 둘로 줄이고 나니 화면에 무엇이 있어야 하는지가 정해졌습니다. 이미지를 올리고 묶고 문장을 붙이는 화면은 필요가 없어졌고, 대신 돈이 나가기 전에 무엇을 돌리는지 보는 화면과 나온 것을 나란히 놓고 보는 화면이 필요해졌습니다.
02 · No Screen For That
데이터를 만드는 화면은 아예 안 만들었습니다
보통은 이런 도구를 만들면 업로드 화면, 이미지를 묶는 화면, 문장을 고치는 화면부터 만듭니다. 저희는 그걸 안 만들었습니다.
이미지를 넣고, 묶고, 문장을 붙이고, 세트를 만드는 일은 전부 에이전트가 API 로 수행합니다. 화면에는 만드는 곳이 없습니다.
덜 만든 게 아니라 안 만든 것입니다. 사람이 클릭으로 할 일이 아니라고 봤기 때문입니다. 수백 장에 문장을 하나씩 붙이는 일을 화면으로 하면, 화면을 잘 만들수록 사람이 그 일을 계속하게 됩니다.
그래서 화면은 사람이 봐야 하는 것에만 뒀습니다. 지금 뭐가 돌고 있는지, 뭐가 나왔는지, 그리고 돈이 나가는 GPU 를 켜고 끄는 것.
대신 화면에 이런 게 붙어 있습니다.
에이전트에게 무엇을 읽히고 무엇을 시킬지가 화면에 있습니다. 어느 문서를 매번 읽어야 하고 어느 문서는 그 일을 할 때만 열면 되는지, 그리고 손대면 안 되는 것이 무엇인지가 적혀 있습니다. 사람이 데이터를 만드는 화면 대신 이게 있는 셈입니다.
일하는 쪽이 에이전트이니 화면이 할 일도 바뀝니다. 버튼을 늘어놓는 게 아니라, 무엇을 읽고 무엇을 건드리지 말아야 하는지를 알려 주는 것이 됩니다.
03 · Structure Only
아직 모르는 것에는 규칙을 만들지 않습니다
도구를 만들 때 제일 오래 붙든 게 이겁니다. 무엇을 도구가 강제하고, 무엇을 매번 새로 정하게 둘 것인가.
강제하면 실수가 줄어드는 대신 그 밖의 실험이 막힙니다. 열어 두면 뭐든 해 볼 수 있는데 나중에 서로 비교가 안 됩니다. 그래서 강제할 것을 셋으로 줄였습니다.
강제하는 것
내용
구조
학습 한 건은 넣을 것 + 나와야 할 것 + 문장. 이 모양만 지킵니다
재현
문장을 저장할 때 그 문장을 뽑을 때 AI 에게 시킨 말도 같이 저장합니다
경로
GPU 를 띄우고 학습을 걸고 결과를 받아 오는 일은 정해진 한 통로로만 부릅니다
구조. 앞 절에서 본 그 세 개 묶음인데, 하나 다릅니다. 앞 절에서는 넣을 것도 나와야 할 것도 이미지였습니다. 그런데 도구는 그게 이미지여야 한다고 정하지 않았습니다. 이 세 개짜리 모양만 지키면 됩니다.
그래서 넣는 게 옷 사진 한 장이어도 되고, 사람 사진과 옷 사진 두 장이어도 되고, 아예 이미지가 아니라 글이어도 됩니다. 나중에 텍스트 학습이 이 안에 그대로 들어온 게 그래서입니다.
재현. 앞 절에서 문장은 AI 에게 초안을 받아 쓴다고 했습니다. 그러면 이런 일이 생깁니다 — 반년 뒤에 그 문장을 다시 봤는데 왜 이렇게 생겼는지 알 수가 없습니다. 어떻게 시켜서 나온 초안인지가 안 남아 있기 때문입니다.
그래서 완성된 문장만 저장하지 않습니다. 그 초안을 뽑을 때 AI 에게 뭐라고 시켰는지를 문장 옆에 같이 저장합니다. 그래야 나중에 "이 실험은 이렇게 시켜서 나온 문장으로 돌렸구나" 를 되짚을 수 있습니다.
이게 필요한 이유가 하나 더 있습니다. 같은 이미지를 AI 에 다시 넣어도 같은 초안이 안 나옵니다. 그래서 "저장 안 해도 다시 뽑으면 된다" 가 여기서는 안 통합니다.
경로. 학습을 걸고, GPU 를 띄우고, 나온 결과를 받아 오는 일은 전부 정해진 한 통로로만 부르게 했습니다. 급할 때 지름길을 하나 뚫어 두면 그때는 빠릅니다. 그런데 문제가 났을 때 어디를 봐야 하는지가 뚫은 사람 머릿속에만 남습니다.
이 셋 말고는 도구가 상관하지 않습니다.
열어 둔 것
실험마다 달라지는 것
문장의 말
핏을 뭐라고 부를지, 어떤 순서로 적을지, 몇 항목을 넣을지
재료 고르기
어떤 옷을 넣을지, 상의만 볼지 하의까지 볼지
묶는 기준
한 장을 넣을지 여러 장을 넣을지
설계 도중에 이 중 첫 번째를 도구가 도와주자는 얘기가 나왔습니다. 쓸 수 있는 어휘를 목록으로 관리하고, 문장 틀을 제공하는 것입니다. 매력적이었습니다. 문장이 제각각이면 나중에 비교가 어려운데, 틀이 있으면 줄이 맞습니다.
버렸습니다. 그 틀은 결국 "우리가 지금 좋다고 생각하는 문장" 이고, 만들어 놓는 순간 그 밖은 실험 대상에서 빠집니다. 그런데 앞 편에서 본 대로 어떤 문장이 좋은 문장인지를 아직 모릅니다.
이유는 이렇게 적혀 있습니다. "무엇을 통제해야 할지 모르는 단계에서 통제 장치를 만들면, 그 장치가 실험을 제약한다."
앞의 네 편이 전부 그렇게 나온 결과입니다. 어떤 말이 잘 먹히는지 미리 정해 놓지 않고, 돌려 보고 세어 본 다음에야 알았습니다. 그전에 문장 틀부터 만들어 뒀다면 그 틀 밖은 재 볼 생각조차 안 했을 것입니다.
덜 정해 둔 덕을 나중에 봤습니다. 지금 이 도구에서 도는 학습은 두 종류입니다. 하나는 이미지 학습 — 브랜드 룩북을 넣고 그 브랜드처럼 입히게 하는 것(문서 3). 다른 하나는 텍스트 학습 — 셀러가 고친 문장을 넣고 상품 설명을 그렇게 쓰게 하는 것(문서 4).
배우는 것도 다르고 결과물도 다릅니다. 그런데 재료를 묶고, 문장을 붙이고, 세트를 만들고, 조건을 걸어 돌리고, 나온 것을 비교하는 흐름은 같습니다. 층을 학습 종류에 안 묶어 뒀기 때문에 텍스트 학습을 시작할 때 새로 만든 것이 거의 없었습니다.
04 · Why Three Layers
애셋 · 조합 · 레코드로 나눈 이유
처음에는 한 덩어리였습니다. 무엇을 넣고 무엇이 나와야 하는지, 그리고 거기 붙일 문장이 한 문서 안에 같이 있었습니다. 그걸 셋으로 갈랐습니다.
이름
무엇인가
애셋
이미지 한 장. 그 자체로는 아무 용도가 없습니다
조합
넣을 이미지와 나와야 할 이미지를 한 벌로 묶고, 이름을 붙인 것
레코드
그 조합에 문장을 입힌 것. 학습에 들어가는 최소 단위
가른 이유가 두 군데에서 각각 다릅니다.
애셋과 조합을 가른 이유 — 사진 한 장이 여러 묶음에 들어갑니다. 같은 평면 컷이 "옷 한 장을 넣어 착용샷이 나오게" 에도 들어가고, "사람 사진과 옷 사진 두 장을 넣어 착용샷이 나오게" 에도 들어갑니다. 이미지에 묶음을 새겨 버리면 그 이미지는 한 가지로만 쓰입니다.
그래서 이미지는 어디에도 안 묶인 채로 둡니다. 실험 하나를 만들 때마다 이미지를 다시 등록하는 구조였을 때는 같은 사진이 여러 벌 생겼고, 한쪽에서 지우면 다른 쪽이 없는 파일을 가리키는 일까지 났습니다.
조합과 레코드를 가른 이유 — 둘의 수명이 다릅니다. 사진을 묶는 건 오래 걸리고 한 번 해 두면 계속 씁니다. 문장은 실험마다 바뀝니다. 같이 묶여 있으면 문장 하나 바꾸려고 묶음을 통째로 다시 만들어야 하고, 묶음을 다시 쓰려면 예전 문장이 딸려옵니다.
이 설계의 이유가 문서에 이렇게 남아 있습니다. "애셋을 조합해서 데이터셋을 준비하는 게 힘든 거라서, 이게 재사용이 되는 게 좋다."
가르고 나서 막혀 있던 실험이 풀렸습니다. 같은 사진 묶음에 문장을 두 벌 달아 놓고 어느 쪽이 잘 배우는지 비교하는 것입니다. 전에는 한 묶음에 문장이 하나뿐이라 두 번째를 만들 데가 없었고, 덮어쓰고 다시 돌렸습니다. 그러면 앞의 것이 사라져서 비교할 대상이 없어집니다.
조합에 이름을 붙인 것도 이때 정했습니다. 넣는 이미지가 여러 장이 되면 목록만 봐서는 뭐가 뭔지 알 수 없기 때문입니다.
그리고 그 위에 세트가 있습니다.
레코드는 학습에 들어갈 수 있는 한 건입니다. 들어갈 수 있다는 것이지 이번에 들어간다는 뜻이 아닙니다. 쌓아 둔 레코드 중에서 이번 실험에는 이것들로 돌리겠다 고 골라 담은 것이 세트입니다.
이게 왜 따로 필요하냐면, 같은 레코드가 여러 세트에 들어가기 때문입니다. 옷 백스무 벌로 학습 세트를 만들고, 거기 안 들어간 서른여섯 벌로 검증 세트를 만듭니다. 다음 실험에서는 같은 재료로 다르게 갈라 담습니다. 레코드에 "이번 세트" 를 새기면 그다음 실험을 못 합니다.
정리하면 이렇습니다. 애셋은 재료, 조합은 재료를 묶은 것, 레코드는 거기에 말을 붙인 것, 세트는 그중 이번에 쓸 것을 고른 것. 앞의 셋은 쌓이고 세트는 실험마다 새로 만듭니다.
세트에 조건을 걸어 실제로 돌린 것이 런이고, 나온 것을 다른 옷에 써 보는 것이 검증입니다.
05 · Tags, Not Folders
이미지를 종류별로 나눠 담지 않습니다
이미지를 넣을 때 "이건 피팅샷 학습용" 같은 데에 넣지 않습니다. 그냥 넣고 태그를 붙입니다. 평면 컷인지, 착장 컷인지, 어느 상품인지, 어디서 온 것인지.
종류별로 나눠 담는 편이 찾기 쉬운데 그렇게 안 했습니다. 우리가 학습시키는 게 한 가지가 아니기 때문입니다.
무엇을 배우게 하나
무엇이 필요한가
착장
옷을 어떻게 입히는가
디테일
단추 · 봉제 · 소재가 가까이서 어떻게 보이는가
배경과 포즈
어디에 서서 어떤 자세를 잡는가
모델
어떤 사람이 입는가
여기서 문제가 생깁니다. 같은 사진 한 장이 실험에 따라 다른 것이 됩니다. 착장을 배우게 하는 실험에서는 그 사진이 나와야 할 이미지인데, 배경을 배우게 하는 실험에서는 같은 사진이 배경 재료입니다.
종류를 정해 나눠 담으려면 앞으로 무슨 학습을 할지를 미리 알아야 합니다. 그걸 모르는 상태에서 나눠 담으면, 나중에 새 종류가 생길 때마다 재료를 다시 넣게 됩니다.
그래서 이미지는 한 군데에 담지 않고 조건으로 걸러 냅니다. 재료를 고를 때 "이 폴더를 연다" 가 아니라 "착장 컷이면서 이 상품군인 것" 처럼 그때 필요한 조건으로 뽑습니다.
덕분에 새로운 종류의 학습을 시작할 때 이미지를 다시 넣지 않습니다. 이미 있는 것에 태그를 더 붙이면 됩니다. 태그는 여러 개 달 수 있고 나중에 얼마든지 추가됩니다.
06 · No Purpose Field
재료에 용도를 안 새깁니다
같은 생각이 한 층 위에도 적용됩니다. 학습에 쓸 묶음과 검증에 쓸 묶음을 따로 만들지 않습니다. 세트에는 용도를 적는 곳 자체가 없습니다. 학습에 쓸지 검증에 쓸지는 돌릴 때 정합니다.
설계 때 이렇게 정리했습니다. "우리 레코드는 학습에 쓰일 수도 검증에 쓰일 수도 있다. 그 세트를 어떻게 구성하느냐에 따라 다른 것이다."
한동안 이 원칙을 어기고 있던 게 하나 있었습니다. 이미지마다 "이건 평가 전용" 을 새겨 두는 기능이었습니다. 편해 보였는데, 재료에 용도를 박으면 그 이미지는 영영 학습에 못 씁니다. 걷어냈습니다.
걷어낼 때 한 가지를 같이 정했습니다. 값만 빼고 항목을 남겨 두면 안 된다는 것. "평가 전용" 만 빼면 "학습용" 하나가 남는데, 그러면 용도 항목이 반쯤 살아 있는 상태가 되고 다음 사람이 거기를 또 채웁니다. 그래서 항목째 없앴습니다.
이 원칙 덕분에 되는 실험이 있습니다. 학습에 넣은 그 묶음을 그대로 검증에 넣어 보는 것. 모델이 배운 걸 얼마나 그대로 뱉는지가 나오고, 그게 이 학습이 낼 수 있는 최고점입니다. 거기까지 못 가면 덜 배운 것이고, 거기만 잘하고 새 옷에서 무너지면 외운 것입니다.
07 · Freeze
"다시 돌리면 된다" 가 성립하지 않습니다
앞에서 문장은 다시 뽑으면 달라진다고 했습니다. 같은 문제가 묶음에도 있습니다. 세트에 담긴 레코드는 시간이 가면서 문장이 고쳐지고, 이미지가 지워지기도 합니다. 그러면 지난달에 돌린 그 학습이 정확히 무엇으로 돌았는지가 흐려집니다.
그래서 학습을 걸 때 그 시점의 세트를 통째로 복사해서 따로 남깁니다. 실제로 GPU 에 들어가는 건 세트가 아니라 이 복사본입니다.
같은 이유로 한 번 돌린 묶음은 수정을 막아 뒀습니다. 고치고 싶으면 새로 만듭니다. 몇 달 뒤에 "그때 뭘 넣었더라" 를 다시 물을 일이 반드시 생기는데, 그때 근거가 되는 건 묶음이 아니라 그때 떠 놓은 사본입니다.
그래서 어느 학습이든 무엇으로 돌렸고 무엇으로 검증했는지를 언제든 그대로 다시 꺼낼 수 있습니다. 반년 전 학습이라도 그때 넣은 것을 그대로 다시 넣을 수 있습니다.
08 · The Queue
일을 걸어 두면 GPU가 집어 갑니다
학습과 검증은 GPU 를 씁니다. 켜 두면 아무 일을 안 해도 계속 돈이 나가고, 자동으로 안 꺼집니다. 그래서 GPU 를 켜 놓고 일을 시키는 게 아니라, 일을 걸어 놓고 GPU 를 켭니다.
01일을 건다돌릴 세트와 조건을 대기줄에 올립니다
02사람이 승인한다몇 장이고 얼마나 걸리고 얼마가 드는지를 보고 정합니다
03GPU를 켠다켜지면 대기줄에서 자기 일을 집어 갑니다
04끝나면 끈다기다리지 않고 바로 지웁니다
순서가 반대면 안 됩니다. 빈 대기줄에 GPU 부터 켜면 할 일 없이 돌기만 하고 그동안 요금은 그대로 나갑니다. 그래서 걸어 두고 켜는 순서를 문서에 못 박아 뒀습니다.
일마다 어느 GPU 가 가져갈지를 지정할 수도 있습니다. 여러 실험을 같이 돌릴 때 남이 켠 GPU 가 내 일을 물어가면 순서가 엉키기 때문입니다. 지정을 안 하면 아예 제출이 안 되게 막아 뒀습니다.
그래서 대기줄을 채워 두고 필요할 때만 GPU 를 켭니다. 학습 하나가 도는 동안 다음에 돌릴 것을 미리 걸어 둘 수 있고, GPU 는 그 사이에 꺼져 있습니다.
09 · The Last One Is Never Best
끝까지 돌린 게 제일 좋았던 적이 없습니다
학습은 한 번에 끝나는 게 아니라 같은 자료를 여러 번 반복해서 봅니다. 그리고 도중에 지금까지 배운 상태를 계속 저장해 둡니다. 학습 하나가 끝나면 그 중간 저장본이 스무 개쯤 남습니다. 끝까지 간 것이 제일 좋을 것 같은데, 지금까지 돌린 학습에서 마지막이 최적이었던 적이 한 번도 없습니다.
97%중간 지점 — 원단 질감이 원본에 이만큼
82%끝까지 돌린 것 — 오히려 떨어짐
더 돌리면 더 닮을 것 같은데 반대로 갑니다. 앞 편에서 적은 그대로입니다 — 과하게 학습하면 부수 요소부터 무너집니다. 신발이 한 모양으로 수렴하고 배경이 회색으로 갑니다. 배우게 하려던 핏은 그때까지 멀쩡한데 주변이 먼저 굳습니다.
그래서 끝난 것 하나만 쓰지 않습니다. 중간 저장본을 여러 개 골라 같은 옷으로 전부 돌려 보고 나란히 놓고 봅니다. 어디서 꺼낼지가 조건을 바꾸는 것만큼 결과를 바꿉니다.
10 · Not Wired In
서비스에 바로 안 꽂아 뒀습니다
이 도구는 스타일룸 서비스와 따로 있습니다. 학습이 끝나서 결과물이 나와도 그게 피팅샷이나 스타일샷에 자동으로 들어가지 않습니다. 꽂으려면 사람이 따로 작업을 해야 합니다.
만들면서 당연히 이 질문이 나왔습니다. 학습이 끝났으면 바로 서비스에서 쓸 수 있어야 하는 것 아닌가.
그런데 그걸 정하려면 무엇을 학습시킬지를 먼저 알아야 합니다. 브랜드 착장을 배운 것, 배경을 배운 것, 상품 설명 문장을 배운 것은 붙는 데가 전부 다릅니다. 아직 무엇을 학습시킬지 모르는 상태에서 연결부터 만들어 두면, 이번에도 그 연결이 학습의 방향을 정해 버립니다.
앞에서 문장 틀을 안 만든 것과 같은 이야기입니다. 이번엔 그게 도구 안이 아니라 도구 바깥에서 벌어집니다. 붙일 데를 하나 만들어 두면 그 뒤로는 거기 들어맞는 학습만 하게 됩니다.
그래서 순서를 뒤집었습니다.
01학습을 돌린다무엇을 배우게 할지는 그때그때 정합니다
02결과를 본다쓸 만한지, 어디에 쓸 만한지를 봅니다
03그때 연결을 만든다그 결과에 맞는 통로를 하나 냅니다
연결을 미리 갖춘 기능으로 두지 않고, 학습이 하나 성공할 때마다 하나씩 내는 것으로 뒀습니다. 이렇게 하면 연결이 늦게 생깁니다. 대신 안 쓸 연결을 미리 만들어 놓고 거기에 실험을 맞추는 일이 없습니다.
따로 둔 덕이 하나 더 있습니다. 실험은 실패하는 게 정상입니다. 조건이 틀려서 다시 걸고, 결과가 엉망이라 버리고, 같은 걸 스무 번 돌립니다. 이게 서비스가 도는 곳과 섞여 있으면 한 번 걸 때마다 조심하게 됩니다. 조심스러운 실험은 많이 못 돌립니다.
11 · What We Take
정리하면
정한 것
왜
사람은 승인과 판정만
나머지는 클릭으로 할 일이 아닙니다
구조 · 재현 · 경로만 정함
모르는 것에 규칙을 만들면 규칙이 답을 정합니다
사실과 해석을 가름
수명이 다른 둘을 묶으면 재료를 다시 만들게 됩니다
이미지를 종류별로 안 나눔
앞으로 무슨 학습을 할지 모릅니다
재료에 용도 안 새김
같은 재료로 여러 실험을 해야 합니다
돌리는 순간 동결
다시 만들면 다른 게 나옵니다
서비스에 안 꽂아 둠
붙일 데를 먼저 만들면 거기 맞는 학습만 하게 됩니다
도구를 만들면서 배운 게 하나 있습니다. 편의를 위해 넣은 항목이 나중에 실험을 막습니다. "이건 평가 전용" 처럼 그때는 당연해 보이는 것이, 다음 실험에서는 못 넘는 벽이 됩니다.
그래서 이 도구는 덜 정해 둔 쪽으로 만들었습니다. 무엇이 좋은 학습인지 아직 모르는 동안에는, 도구가 답을 정하지 않는 편이 낫습니다. 앞의 네 편에 적은 결과들이 전부 그 안에서 여러 번 고쳐 걸어 나온 것입니다.