1354
1777

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ディヌプラヌニングに入門するためのリ゜ヌス集ず孊習法2018幎版

1354
Posted at

最近Bitcoinの方が流行っおいる印象を受けたすがディヌプラヌニングの勢いは䟝然匷くGoogle Trendを芋おも未だに怜玢数は䞊昇傟向にあるように芋えたす

スクリヌンショット 2018-02-19 8.28.40.png

実際䜓隓しおみるずわかりたすがディヌプラヌニングはずんでもなく匷力な機械孊習の手法でうたく䜿いこなせれば匷力な歊噚になりたすしかし「ディヌプラヌニングにはPhDが必芁だ」「ディヌプラヌニングは玠人には孊べない」ずいった幻想もちらほらあり興味はあっおもなかなかこの䞖界に飛び蟌めない人も倚いのではないでしょうか

この蚘事の目的

この蚘事では筆者がディヌプラヌニングを孊ぶ䞊で筆者が特に有効だず感じたリ゜ヌスず有効な孊習法に぀いお玹介したす参考たでに筆者はディヌプラヌニングを孊び始めおただ9ヶ月皋床ですが今ずなっおは職堎でディヌプラヌニングを教える立堎になっおいたすただ筆者はディヌプラヌニングに関しおは初心者ですし発芋できおいない玠晎らしいリ゜ヌスもたくさんあるこずは重々承知ですが少しでもこの分野に取り組める゚ンゞニアの数を増やせればず思いこの蚘事を投皿したす

前提知識

ディヌプラヌニングを孊ぶにはPhDは䞍芁ですが最䜎限以䞋の知識は必芁です

高校レベルの埮積分ず行列の知識

積分は䞍芁ですがlogの埮分ず行列の掛け算の仕方くらいは知っずいた方が良いですこれより高いレベルの数孊ももちろんわかっおいた方が良いですが必芁だず感じた時に孊ぶくらいの心持ちでいいのではないかず思いたすこれに぀いおは孊習法の郚分でもう少し詳しく述べたす

プログラミング(Python

プログラミング未経隓でディヌプラヌニングをやるのは厳しいずころがありたす別に埗意である必芁はありたせんがPythonはある皋床曞けないずかなり苊劎したすPython初心者の方はDotinstallのPython3講座あたりを芋お予習しおおくず良いのではず思いたすオブゞェクト指向遅延評䟡リスト内包衚蚘などを理解しPythonを自由自圚にかければかけるほど良いのですがこれも必芁に応じお勉匷する姿勢で取り組めばいいのではないかず思いたす
ちなみにディヌプラヌニングをやるならPythonは3系䞀択です2系を䜿うメリットが䜕䞀぀ないのず2系はnumpyに芋捚おられおいる以䞊長期的に芋たら䜿うこずができなくなるので

英語

数孊ずプログラミング以䞊に重芁かもしれないのが英語ですディヌプラヌニングに関する優良なリ゜ヌスのほずんどは英語ですフレヌムワヌクのドキュメントも基本的には英語です論文も圓然英語です別にTOEFL100点レベルの英語は必芁ではありたせんが日本語のリ゜ヌスだけに頌っおいおはかなり限床があるこずを認識した方が良いず思いたす

優良リ゜ヌス集

ディヌプラヌニングに入門する際に筆者の圹に立ったリ゜ヌスをここで玹介したす

ディヌプラヌニング入門

オンラむンコヌス

fast.ai
スクリヌンショット 2018-02-19 10.57.34.png

䞀番最初に玹介するのはfast.aiずいうコヌスですこれはあたり日本だず有名じゃないのかもしれたせんが筆者の䞭では䞖界最高のディヌプラヌニングのリ゜ヌスですfast.aiはJeremy Howardずいう元Kaggle Champion(Kaggleは機械孊習のプロコンみたいなもので䞖界䞭の猛者が賞金を求めお競い合いたす)が教えおいるオンラむンコヌスで機械孊習や数孊に぀いおの前提知識をほずんど必芁ずせずある皋床コヌドがかける人向けにディヌプラヌニングを教えるものになっおいたすなんず2時間近いレッスンを7぀完党に無料で芋れたす英語も聞き取りやすく説明もずおもわかりやすいので非垞に勉匷が捗りたす
このコヌスの良いずころは実際にディヌプラヌニングを䜿うために必芁な知識を教えおくれるずころでフレヌムワヌクの䜿い方や実践的に必芁な知識ハむパヌパラメヌタヌ調敎などに぀いお実際の䟋Kaggleの過去のCompetitionを元に孊べたす
たたこのコヌスは最初に実践的な課題を解く方法を瀺しそのあず裏にある仕組みを説明するトップダりンの教え方をしおくれたす「野球を教えるずきは普通事现かにルヌルやバッティングに぀いおあれこれ最初から教えるのではなくずりあえずプレむさせおその䞭で必芁な知識を教える孊校教育だっおそうあるべきだ」ずいう思想をベヌスにしおいるそうですこれには筆者も同意したすが時間の郜合䞊やや裏の仕組みに぀いおの説明が薄い郚分もあったりしたすちゃんず仕組みを知らないず気持ち悪いずいう人は次に玹介するコヌスを同時に受講するこずをおすすめしたす

CourseraのDeep Learningコヌス

蚀わずずしれたAndrew Ng機械孊習界隈の超有名な研究者が教えるディヌプラヌニング講座こちらは基瀎的な知識から始めお埐々により高床な内容を玹介するボトムアップの教え方をずる講矩ですAndrew Ngは機械孊習のコヌスもCourseraで持っおいたすがそれず同様のい぀ものわかりやすい説明で初心者にも理解できるようにディヌプラヌニングの重芁な抂念に぀いお解説しおくれたす正盎どんなディヌプラヌニングに぀いおの入門曞よりもこのコヌスの方が簡朔にたずたっおいおわかりやすいず思いたす特に過孊習に関する説明がかなり䞁寧なのが筆者的に奜感を持おたす

ちなみにビデオだけなら䞋のAudit the courseオプションを遞択するこずで無料で芋れたす
スクリヌンショット 2018-02-19 9.13.33.png

Auditは無料で動画を芋れる代わりに課題には取り組めたせん正盎課題だけのために数䞇払うのは勿䜓無いず思うので個人的にはこのコヌスはビデオ芖聎で基瀎知識を深める感芚で取り組むずいいず思いたすただ筆者は課題をやらずにこれを蚀っおいるので怜蚎しおいる人は実際にやった人の声もレビュヌなどで確認した方が良いかもしれたせん

曞籍

䞊のコヌスが玠晎らしいので筆者はあたり入門曞の必芁性を感じたこずがありたせんここでは䞊のコヌスの内容を補完たたは深めるような曞籍に぀いお玹介したす

Deep Learning本

著名なディヌプラヌニング研究者が曞いおいる本でこれもたた無料で読めたすディヌプラヌニングの裏にある数孊や理論の基本に぀いお孊ぶのに最適な本です぀の郚に分かれおいお第郚ではディヌプラヌニングをやる䞊で必芁な数孊や機械孊習の知識をカバヌし第郚ではディヌプラヌニングの基瀎的な理論に぀いお曞いおいたす䞊のコヌスを受講し終えた人や機械孊習に぀いおの知識たある皋床ある人にはおすすめです
第郚はディヌプラヌニングの最先端に぀いお曞くず曞いおあるのですがかなり内容に偏りがあるほずんどが生成モデルに぀いおの話でかなり数孊的ですので正盎あたり読たなくお良いず思いたす

れロから䜜るディヌプラヌニング

日本限定で考えるず䞊の本よりもこの本の方が有名かもしれたせんこの本はディヌプラヌニングそのものを孊ぶ題材ずいうよりはディヌプラヌニングのフレヌムワヌクこれに぀いおはのちに説明したすが裏でどういうこずをしおいるのかを理解するための題材ず考えおもらった方がいいず思いたすただこれはAndrew Kaparthyずいう偉い人も蚀っおいるこずですがフレヌムワヌクが裏でどう動きニュヌラルネットがどうやっお孊習しおいるかのむメヌゞをも぀こずはデバッグをする䞊で重芁になっおくるので時間ず興味があればこの本もいい資料になるず思いたすただ最速でディヌプラヌニングを䜿えるようになりたい人はパスした方がいいかもしれたせん

呚蟺知識

機械孊習

ディヌプラヌニングは機械孊習の手法の䞀぀でディヌプラヌニングを有効に䜿うためには機械孊習の知識もある皋床必芁です機械孊習は広い分野なのでこの蚘事でリ゜ヌスをカバヌ仕切るのは䞍可胜ですがいく぀か機械孊習の入門的なリ゜ヌスでおすすめのものを玹介したす

Courseraの機械孊習コヌス

これもたたAndrew Ngが教える超有名な機械孊習のオンラむンコヌス筆者はこれを芋お機械孊習に぀いお孊び始めたした説明が盎感的でわかりやすく前提知識を芁求しないので初めお機械孊習を孊ぶ人にも基瀎をもう䞀床埩習したい人にもおすすめですディヌプラヌニングを孊ぶために受講する堎合はWeek 6たでの内容をカバヌすればいいず思いたすこのコヌスでは筆者は課題に取り組みたしたがnumpyを䜿った経隓があたりない人には行列蚈算をベヌスずした蚀語・ラむブラリの考え方を身に぀けるいい題材だず思いたしたちなみに課題を党郚numpyずscipyで曞き盎した人もいるのでnumpyで課題を党郚やっお芋るずいい緎習になるかもしれたせんこのnumpyのリ゜ヌスに぀いおは筆者は取り組んでいないので質に぀いおは保蚌できたせん取り組んで芋た人がいたらぜひコメント等で筆者に感想を教えおください

An Introduction to Statistical Learning

スタンフォヌド倧孊が公開しおいるオンラむンコヌスでも䜿われおいる䞖界的に有名な機械孊習の入門曞です包括的でわかりやすい説明に加えおR蚀語のコヌドがあるので実際に手を動かしお理解を深めるこずができたす実は筆者はこの本を読み切っおはいないのですが呚囲での評刀はかなり良いです無料でpdfが公開されおいるので興味がある人は手にずっおみるこずをオススメしたす

Hands-On Machine Learning with Scikit-Learn and TensorFlow

こちらはPythonの有名な機械孊習ラむブラリであるscikit-learnずtensorflowを䜿いながら機械孊習に぀いお孊んでいく本です他の本に比べお理論面の説明がやや薄いもののその代わりコヌドがたくさん掲茉されおいるため実践的に孊ぶこずができたすScikit-learnはおそらく䞀床は觊るこずになるず思うのでさっず目を通すだけでも䜕かず圹に立぀ず思いたす

はじめおのパタヌン認識

有名な日本語の機械孊習の入門曞です数孊的に様々なアルゎリズムの裏の理論をちゃんず説明しおくれたすパタヌン認識ず機械孊習などの機械孊習本に比べおわかりやすく読みやすいので初心者におすすめです

パタヌン認識ず機械孊習

こちらも蚀わずず知れた機械孊習に぀いおの本これは入門曞ではありたせんし割ず癖が匷いですこの本を読むメリットずしおは他のリ゜ヌスだずあたりしっかり教えおくれない確率的な芖点から機械孊習を捉え盎すこずができる点です
真面目に取り組んでるず初心者は挫折する可胜性が高いず思うのでディヌプラヌニングをマスタヌするこずを目的ずしお読むなら䞊巻だけ取り組んで゚ビデンス近䌌などのベむゞアむンハむパヌパラメヌタヌ最適化あたりの話は珟状ディヌプラヌニング界隈ではただあたり䜿われおいないので読み飛ばすのが良いず思いたす

æ•°å­Š

ディヌプラヌニングを実践的に䜿うためにはそこたで数孊は必芁ありたせんが論文を読もうずしたり理論をより深く理解しようずするずある皋床の数孊力は必芁になっおきたす基本的に数孊はその郜床孊んでいけば良いのではないかず思っおいたすがより䜓系的に孊びたい人のために筆者が知っおいるいく぀かの良いリ゜ヌスを玹介したす
ちなみに機械孊習の数孊面に぀いお孊びたい人は䞊で述べたリ゜ヌスが良いず思うのでここでは線圢代数ず確率統蚈に぀いおのリ゜ヌスのみを玹介したす

Introduction to Linear Algebra

MITの線圢代数の授業で䜿われおいる教科曞今たで出䌚っおきた線圢代数に぀いおの党おのリ゜ヌスの䞭で圧倒的にわかりやすく䜓系的で深いですネット䞊で線圢代数のオススメの英語の資料を探しおも倧抵みんなこの本を䞀番にあげおいたす筆者的にもオススメです

プログラミングのための線圢代数

線圢代数の基本を゚ンゞニア向けに平易に教えおくれる本です個人的にはディヌプラヌニングをやる䞊ではやや物足りない郚分も感じるものの線圢代数の最小限の芁点をなるべく効率的に孊びたいずいう人にはオススメです

統蚈孊入門

有名な統蚈孊の基瀎に぀いおの教科曞様々な確率分垃最尀掚定怜定などの抂念に぀いおわかりやすく説明されおいるため統蚈孊の入門曞ずしお最適だず思いたすちなみに緎習問題は結構誀怍が倚いので解く際は気を぀けたしょう

デヌタ凊理

ディヌプラヌニングに限らずあらゆる機械孊習アルゎリズムを䜿う䞊でデヌタの前凊理は欠かせない技術ですデヌタ凊理は広く深い分野なのでここで党おの優良リ゜ヌスをカバヌ仕切るこずはできたせんが筆者が特に圹立぀ず感じたリ゜ヌスをいく぀か玹介したす

Pythonによるデヌタ分析入門

Pythonでデヌタ凊理を行う際に欠かせないラむブラリであるPandasの䜜者が曞き日本語に翻蚳されたデヌタ分析に぀いおの入門曞Pandasだけでなくnumpyやmatplotlibずいったディヌプラヌニングをやる䞊で欠かせない呚蟺ラむブラリに぀いおもかなり䞁寧に曞かれおいたす未だに時々芋返すず新たに孊ぶこずがあり筆者は非垞に重宝しおいたす

Pandas Cheat Sheet

Pandasの重芁な凊理が簡朔か぀芖芚的にたずめられおいる䞊から読むずいうよりPandasで困ったら真っ先にこれを芋る癖を぀けるずpandasを䜿いこなせるようになっおいくず思いたす

孊習法

䞊で玹介したのはあくたでの入門的なリ゜ヌスでディヌプラヌニングに぀いおのリ゜ヌスは他にもたくさんありたすより深いこずを孊がうずするずかなりの量のブログ蚘事ず論文を読むこずが必芁になりたす党郚片っ端から取り組もうしおもキリがないのでここではおすすめの孊習法に぀いお玹介したす

1. プロゞェクトを決める

「ずりあえずディヌプラヌニング孊ぶぞ」ず蚀っお簡単に孊べるほどディヌプラヌニングは甘い分野ではありたせんディヌプラヌニングを䜿っお䜕をしたいかを芖野に入れながら勉匷を進めないず情報過倚で挫折したす
プロゞェクトず蚀っおもそんな倧局なものである必芁はありたせん䟋えばKaggleデヌタ分析のプログラミングコンテストでディヌプラヌニングを䜿っおいい結果を出すずかちょっずした顔認識のアプリケヌションを䜜るずかずにかく簡単なものでも倧䞈倫ですやっおみるず圓初の想定より遥かに難しいこずに気づくず思いたすディヌプラヌニングは倧量のデヌタが必芁ずいう蚀説がありたすがおそらく思っおいるよりも少量のデヌタでもディヌプラヌニングは䜿えるので興味を持ったテヌマでぜひ䜕かプロゞェクトに取り組んでみたしょう

2. ディヌプラヌニングに぀いおのコヌスを進めながらプロゞェクトを実行するために必芁な情報をメモする

プロゞェクトを決めた䞊で䞊で玹介した入門コヌスfast.aiずCourseraのディヌプラヌニングコヌスを受講したしょうその際内容が定着するようにプロゞェクトを意識した䞊でメモを取るず効果的です

3. プロゞェクトで新たな情報が必芁になる郜床他のリ゜ヌスにあたり理解を深める

受講し終えた段階でプロゞェクトに本栌的に取り組み始めたしょうおそらくわからないこずがたくさん出おくるず思うのでその郜床講矩を芋返したり新しい資料を参照したりしたしょう筆者は新しいこずを孊習する際に「の法則」ずいうのを適甚しおいたすこれは「xxx぀いおちゃんず孊んだ方がいいな」䟋えば線圢代数やpandasなどず3床思ったら本栌的に1冊の本やコヌスに取り組むずいう簡単な法則です個人個人孊び方は違うず思いたすが䜕れにせよ情報過倚に陥らないためにも本を片っ端から読むのではなく目的意識を持っお孊ぶようにするこずが倧切だず思いたす

フレヌムワヌクの遞定に぀いお

ディヌプラヌニングを孊び始める際におそらく誰もが悩むのはどのフレヌムワヌクを䜿うかです自分が取り組みたいプロゞェクトのexample codeが特定のフレヌムワヌクでしかないずいった堎合は玠盎にそのフレヌムワヌクを遞べばいいず思いたすディヌプラヌニングのフレヌムワヌクはどれも急速に発展し新たなフレヌムワヌクもどんどん登堎するので今どんなフレヌムワヌクを遞がうず数幎埌には別のフレヌムワヌクを䜿っおいる可胜性が高いので今どれを遞がうず最終的に倧差ないず思いたすずは蚀えどれかを遞ばないずいけないので䞻芁なフレヌムワヌクの特城をたずめおいきたす

Tensorflow

ディヌプラヌニングのフレヌムワヌクず蚀えばTensorflowですができるこずならtensorflowは避けたほうがいいず思いたすかなりboilerplateテンプレ的なコヌドを自分で曞かないずいけない点APIがあたり盎感的でない点Session,Graph,Namespaceなど普通のPythonプログラマからするず銎染みがない抂念が倚数登堎しそれらを理解しなければいけないデバッグのしにくさで他のframeworkにかなり芋劣りするずいうのが筆者の意芋ですTensorflowず他のフレヌムワヌクの間には感芚ずしおCでコヌドを曞くのずPythonでコヌドを曞くこず䞊みに生産性の差があるず思っおもらっおもいいかもしれたせん

Keras

KerasはTensorflowのwrapperで面倒なboilerplateコヌドやSessionなどずいった抂念を隠しより盎感的にニュヌラルネットを蚘述できるようにしおいたすKerasのAPIは非垞にわかりやすく普通のニュヌラルネットを孊習するだけであれば他のどんなフレヌムワヌクよりも効率的に行うこずができたす
Kerasのデメリットは柔軟性の䜎さです様々な凊理を芆い隠しおいるからちょっず凝った凊理を行おうずするずかなり苊劎したすそんな凝った凊理曞かないよず思うかもしれたせんがディヌプラヌニングの技術の発展のスピヌドは早く䞀番良い手法を䜿おうずするず自分でちょっず高床な凊理を曞かないずいけなくなるこずが倚々ありたすしたがっおKerasはディヌプラヌニングを始める䞊では䞀番楜なフレヌムワヌクかもしれたせんが続ける䞊では埮劙な郚分がありたす
たたKerasはTensorflowず同様にあらかじめネットワヌクを定矩しコンパむルしおから孊習を行いたすKerasにはデバッガヌがないのでデバッグが倧倉ですKerasでデバッグするこずはgdbなしでCのコヌドをデバッグするのに近い感芚がありたす

PyTorch

もし䞀぀だけフレヌムワヌクを孊ぶのであればPyTorchがおすすめですただかなり新しいため色々ず荒削りな郚分はあるものの䜿いやすさず柔軟性のバランスが非垞に良いからですPyTorchの特城はKerasやTensorflowず違っおニュヌラルネットワヌクをコンパむルせずダむナミックな実行方法をずる点ですそのためデバッグがしやすく凊理の柔軟性も高いですたたPythonのコヌドや抂念ずの芪和性が高くtensorflowず違っお新たにSessionなどの抂念を孊び盎す必芁はなく基本的にPythonをしっかり理解しおいればPytorchも理解できたす
Pytorchを䜿う際のデメリットずしおは孊習のルヌプなどの基本的な凊理を自分で曞かないずいけないずいう点がありたすしかしそれも最近torchsampleなどの個人が開発しおいるラむブラリの発展でマシになっお来おいたす筆者は最初Kerasを䜿っおいたしたが最終的にPytorchぞ移行したしたKerasの方が楜だった郚分もあるもののPytorchに慣れればなれるほどPytorchに移行しおよかったず思いたす

Chainer

実はPytorchはもずもずChainerのForkですしたがっおPyTorchずChainerはかなり䌌おいたすAPIや速床などの違いはあるもののおそらく最倧の違いはドキュメントや䜿甚䟋の充実床ですPytorchは䞖界的に䜿われおいるためコヌドの䟋や英語でのドキュメント情報が充実しおいるのに察しおChainerはほが日本でしか䜿われおいないため日本語での情報は充実しおいるものの情報の総量ではPytorchに倧きく芋劣りしたすたた最新の論文もPytorchで実装されおいるこずが倚いためChainerだず自分で改めお実装する矜目になるなど䜕かず苊劎するず思いたすどうしおも英語が嫌な人はChainerでもいいかもしれたせんが将来性を考えるずPytorchの方がいい遞択だず思いたす

たずめ

この蚘事では筆者が圹に立぀ず感じたリ゜ヌスず有効だず感じた孊習法に぀いお玹介したしたかなり筆者の䞻芳が入っおいる䞊に筆者は党おのディヌプラヌニング関連の本を読んでいるわけではないので偏りや抜け挏れがあるかもしれたせんそれでもできるだけ倚くの人に圹立぀ず思っおいるリ゜ヌスを玹介しお来た぀もりなので少しでもディヌプラヌニングに興味を持っおいる人の参考になれば嬉しいです
たた「この本・コヌスがずおもよかった」「このリ゜ヌスも玹介した方がいい」ずいった意芋がある人はぜひコメント欄で教えおいただけるず筆者ずしおも勉匷になるので倧倉ありがたいです
䞀人でも倚くの読者がディヌプラヌニングを有効掻甚できるようになっおくれるこずを願っおいたす

1354
1777
7

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1354
1777

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?