8년 동안 교육 회사 Dataquest를 운영했습니다. 작년, 다시 무언가를 만들고 싶다는 욕구가 들었습니다. 딥 러닝은 항상 흥미로웠지만, 그것에 대해 거의 아무것도 몰랐습니다. 그 문제를 해결하려고 노력했습니다.
그 이후로, 수십 개의 모델을 훈련시켰으며(오픈 소스에서 몇 가지 최첨단 모델), 5천 개 이상의 Github 스타를 받은 2개의 라이브러리를 개발했으며 최근에는 Jeremy Howard가 설립한 answer.ai 연구소의 제안을 수락했습니다.
내 학습 여정의 대략적인 개요를 설명하기 위해 이를 말합니다. 이 게시물에서는 딥 러닝을 어떻게 배웠는지에 대해 더 자세히 다룰 것입니다. 아마도 당신의 여정에 도움이 될 것입니다.
학교에서는 이런 것들을 배우지 않았어요. 학부 시절에 미국 역사를 전공했는데, 수업을 몇 개나 낙제했었죠
2012년에 기계 학습과 파이썬 작업을 했지만, 딥 러닝이 너무 복잡하다고 스스로 납득시켰습니다. 이는 Kaggle 경연을 통해 배웠기 때문 중 하나였습니다. Kaggle 경연은 빠르게 배우는 데 놀라울 정도로 효과적하지만, 알고리즘의 수학적 작동 방식과 같은 기본 지식 부분에는 빈틈을 남길 수 있습니다.
딥 러닝이 인기를 얻기 시작할 때, 그것은 매우 수학적이었고, 나는 그것을 이해할 수 없을 것 같았습니다. 물론, 이것은 나중에 10년 후에 증명했지만, 어떤 것에 접근하는 각도가 모든 차이를 만듭니다. 처음에는 위에서 아래로 딥 러닝에 접근했는데, 모델을 이해하지 않고 붙여넣기만 했습니다. 결국 벽에 부딪혔고, 그 너머로 나아갈 수 없었습니다.
작년에 딥 러닝을 공부할 때 이미 유용한 기술을 가지고 있었습니다. 첫 번째는 강력한 Python 프로그래밍 능력이었습니다. 노력에도 불구하고 Python은 여전히 AI의 보편적인 언어입니다. AI에 진입하려면 먼저 프로그래밍을 정말 잘하도록 노력하세요
AI의 어떤 시대에 있든, 데이터 정제가 제 업무의 70% 이상을 차지했습니다. 순수한 연구를 수행하거나 장난감 문제에 작업 중이라면 데이터 작업을 피할 수 있지만, 그렇지 않다면 데이터 스킬은 필수적입니다.
약간 더 모호한 스킬이 있는데, 그것을 실용주의라고 부를게요. 딥 러닝은 '어떤 것이 완벽한 기본 모델일까?', '시그모이드를 제거하면 어떨까?'와 같은 다양한 미묘한 문제들이 많습니다. 이러한 문제 중 일부는 유용할 수 있지만, 대부분은 많은 시간을 소모할 것입니다. 언제 심층적으로 파고들어야 하는지, 그리고 빠르고 쉬운 해결책을 선택해야 하는지를 인식할 수 있는 능력은 중요합니다.
'책 학습 -------------------------------'
이번에는 아래에서부터 시작하여 기초부터 배우기로 결정했습니다. The Deep Learning Book을 읽었습니다. 몇 년 전에 나온 책이지만 여전히 훌륭한 자료입니다. 천천히 읽으세요. 용어와 수학이 익숙하지 않을 수 있습니다 - 찾아보세요. 몇 가지를 스케치하거나 코드로 작성하여 이해해야 할 수도 있습니다 - 그 공간을 스스로에게 주세요. 수학이 익숙하지 않다면 Math for Machine Learning가 좋은 보조 자료입니다. 제가 수강한 적은 없지만, fast.ai와 Karpathy videos는 고품질 자료입니다.
CNN 또는 RNN과 같은 아키텍처가 모든 것을 위해 트랜스포머로 이동하는 세상에서 구식으로 보일 수 있지만, CNN은 여전히 널리 사용되고 있습니다, 그리고 모든 것은 RNN과 함께 다시 새롭게 됩니다.
책의 첫 2부를 마치면 (3부는 건너뛸 수 있습니다), 순수한 넘파이로 주요 신경망 아키텍처 중 어떤 것이든 코딩할 수 있는 지점에 도달해야 합니다 (순방향 및 역방향 패스).
그 지점에 도달하는 데 정말 도움이 되는 한 가지는 그 기술을 배우는 동안 가르치는 것입니다. 나는 딥 러닝 책을 읽으면서 Zero to GPT라는 강의를 만들기 시작했습니다. 가르치는 것은 개념을 확고히 하는 궁극적인 방법이며, 나는 배우고, 이해하지 못한 것을 찾아보거나 스케치하고, 그것을 가르치는 좋은 사이클에 빠지게 되었습니다.
이 책은 여러분을 2015년대의 딥 러닝으로 안내할 것입니다. 책을 읽은 후에는 2015년부터 2022년까지의 기본 딥 러닝 논문 중 일부를 읽고 PyTorch에서 구현했습니다. 무료/저렴한 GPU를 사용하려면 Google Colab을 사용할 수 있으며, 훈련 실행을 추적하려면 Weights and Biases를 사용할 수 있습니다.
비완전한 목록은:
이후에는, 깊은 학습 모델 구조에 대한 사람들의 대화 대부분을 이해할 수 있어야 합니다.
'Fine-tuning and Discord ---------------------------------------------------'
요즘 모델 훈련의 가장 쉬운 진입점은 기본 모델을 파인튜닝하는 것입니다. Huggingface transformers는 이미 많은 모델을 구현하고 PyTorch를 사용하기 때문에 파인튜닝에 좋습니다.
Discord 커뮤니티인 Nous Research와 EleutherAI 같은 곳에서 사람들이 최신 모델과 논문에 대해 토론합니다. 현재 최신 기술이 무엇인지 확인하고 일부 파인튜닝을 시도해보는 것을 추천합니다.
Feinetune하는 가장 쉬운 방법은 작은 모델(7B 또는 그 이하의 파라미터)을 선택하고 LoRA로 feinetuning을 시도하는 것입니다. Google Colab을 사용하거나 VRAM이 더 필요하거나 여러 개의 GPU가 필요한 경우 Lambda Labs와 같은 것을 사용할 수 있습니다.
나는 모델을 더 잘 코딩하기 위해 훈련시키고 싶었기 때문에 StackOverflow와 다른 곳의 데이터를 사용하여 데이터셋을 구성하고 몇 가지 다른 기본 모델을 세밀하게 조정했습니다. 이는 모델 아키텍처, 데이터, 컴퓨팅 및 출력 간의 연결을 이해하는 데 많은 도움이 되었습니다. 그러나 세밀한 조정은 매우 혼잡한 공간이며, 최신 기술이 매일 바뀌는 상황에서 영향을 미치기 어렵습니다.
'문제 발견 ---------------------------------------'
핀튜닝 작업 중에 가장 높은 품질의 데이터 중 일부가 교과서 형태로 제공되고 PDF 파일로 잠겨 있음을 깨달았습니다. 이 문제를 해결하기 위해 시도한 한 가지 방법은 합성 데이터를 생성하는 것이었습니다.
다른 방법은 pdf에서 데이터를 추출하여 좋은 훈련 데이터(markdown)로 변환하는 것이었습니다. 많은 경우에 잘 작동했지만 실행 속도가 느리고 비용이 많이 드는 nougat라는 접근 방식이 있었습니다. 나는 이미 pdf에 있는 데이터를 활용하여 더 나은 것을 만들 수 있는지 확인하기로 결정했고(OCR를 피함), 필요할 때만 모델을 사용했습니다. 나는 중간에 휴리스틱과 함께 여러 다른 모델을 연결했습니다. 이 접근 방식, marker는 nougat보다 10배 빠르며 어떤 언어에도 작동하며 일반적으로 더 정확합니다.
마커에 대한 작업은 여러 문제를 해결하고 싶게 만들었고, LaTeX model에 대한 방정식을 훈련시키기도 했으며, 텍스트 감지 모델, Google Cloud와 경쟁하는 OCR model, 레이아웃 모델도 훈련시켰습니다.
이러한 모든 모델에 대해 기존 아키텍처를 사용하여 레이어, 손실 및 기타 요소를 변경한 후 적절한 데이터셋을 생성/찾았습니다. 예를 들어 OCR 모델의 경우 Donut 아키텍처를 기반으로 시작하여 GQA, MoE 레이어, UTF-16 디코딩(모든 문자에 대해 1-2 토큰)를 추가하고 일부 모델 형태를 변경했습니다.
OCR 모델은 일반적으로 작은 모델(300M 매개변수 미만)이기 때문에, 이러한 모든 모델을 4대의 A6000에서 훈련할 수 있었습니다. 효율적이었다면 2대의 A6000으로도 충분히 할 수 있었을 것 같습니다.
희망컨대, 이것이 당신에게 3가지를 명확히 보여줄 것입니다:
- 기본 원리를 이해하는 것은 좋은 모델을 훈련하는 데 중요합니다
- 해결할 흥미로운 문제를 찾는 것이 구축한 것으로 영향을 미치는 가장 좋은 방법입니다
- 많은 GPU가 필요하지 않습니다
AI에는 많은 분야가 있어 상대적인 외부인으로서도 큰 영향을 줄 수 있습니다.
제가 오픈소스로 제 모든 AI 프로젝트를 공개하는 것을 아실 수 있습니다. 데이터 스택은 영향력에 비해 매우 투자가 적은 AI 분야입니다. 저는 고품질의 훈련 데이터를 보다 널리 배포할수록 1-2 개의 기관이 우수한 모델에 독점을 가지는 위험이 낮아진다고 강하게 느낍니다.
오픈 소스는 노출을 얻는 좋은 방법이기도 한 부작용이 있습니다. 이것이 이야기의 마지막 부분으로 이어집니다.
'연구 직업 얻기 -------------------------------------------------'
내 오픈 소스 도구를 기반으로 비즈니스를 만들어보려고 생각 중이었습니다. 어딘가에서 일하는 것은 전혀 고려하지 않았습니다. 그러나 제레미가 answer.ai에 대해 연락을 주자, 이 기회를 잡아야겠다고 느꼈습니다. 재능 있는 사람들과 함께 일하고 긍정적인 영향을 미치며 많은 것을 배울 수 있는 기회를 놓치기는 어려운 것 같았습니다.
내 오픈 소스 작업은 직접적으로 취업 기회로 이어졌습니다. 노출을 통한 명백한 방식뿐만 아니라, 기술을 크게 향상시킴으로써 미묘한 방식으로도 그렇습니다. 아마도 당신도 배우면서 무언가를 오픈 소스로 공개할 것을 희망합니다.
'다음 단계 -------------------------'
나는 answer.ai에서의 업무가 내 오픈 소스 작업과 매우 유사할 것으로 의심합니다. 모델을 계속 훈련시키고 데이터 스택을 개선하며 공개적으로 공개할 것입니다.
딥 러닝에 입문하려고 노력 중이라면, 이 게시물이 유용했기를 바랍니다. 그렇지 않다면, 즐거웠기를 바랍니다(끝까지 읽었으니까 아마 그랬을 것입니다, 맞죠?).
나는 다시 모델을 훈련시키러 돌아가겠습니다 (지금 2개의 모델이 수렴하는 것을 지켜보고 있습니다).