振り返るとそこには「Python機械学習プログラミング」④驚
はじめに
シリーズ「Python機械学習プログラミング」の紹介
本シリーズは書籍「Python機械学習プログラミング PyTorch & scikit-learn編」(初版第1刷)に関する記事を取り扱います。
この書籍のよいところは、Pythonのコードを動かしたり、アルゴリズムの説明を読み、ときに数式を確認して、包括的に機械学習を学ぶことができることです。
Pythonで機械学習を学びたい方におすすめです!
この記事では、この書籍のことを「テキスト」と呼びます。
記事の内容
テキスト「Python機械学習プログラミング PyTorch & scikit-learn編」(初版第1刷)の一周完走を記念して、感想を綴ります。
全19章・712ページにわたって実装を重ねた機械学習アルゴリズムとのふれあいの日々のダイジェストです。
今回は「驚」章です。
驚:PyTorch、降臨
12章から、PyTorchを利用してディープラーニングに邁進します!
12章 ニューラルネットワークの訓練をPyTorchで並列化する
12章では初登場のPyTorchの基礎としてテンソルの操作を学びます。
その後、データセットを作成する練習をします。torchvisionの登場です。
強敵CelebAデータセットもやってきます。
概要
この章では、PyTorchを使いこなす前の準備体操に取り組みます。
PyTorchで扱えるデータ(つまりテンソル型)を作り込むデータローダーやデータセットの作成に多くの時間を割きました。
そして、PyTorchのお友達ライブラリである torchvision を経由して外部リソースのデータを取得します。
PyTorchのインストール
PyTorchの公式サイトでインストールコマンドを取得できます。
インストールについて、この記事にまとめました。
落とし穴
お友達ツールtorchvisionを「経由」してデータ取得することが、悲劇を生みます。
CelebAデータセット(大量の顔画像データと属性データ)をGitHubリポジトリから手動でダウンロードして、torchvisionでこのダウンロードデータを読み込ませる必要がありました。
ただ、ダウンロードデータ取得のフォルダ配置方法について、正確な情報がテキストに記載されていなかったため、とても難儀したのです。
詳しくはこの記事をお読みください!
また、テキストのコード記載誤りで右往左往したのもこの章の思い出です。
詳しくはこの記事をお読みください!
集中線のお世話になりました。
13章 PyTorchのメカニズム
13章はPyTorchで回帰問題、分類問題を実装する、PyTorchのお試しコーナーのような位置づけです。
計算グラフ、自動微分などを学び、PyTorchのnn.Sequentialでモデルを定義して、次のお決まりの流れでモデルを訓練します。
pred = model(…) # 予測
loss = loss_fn(pred, y_batch) # 損失計算
loss.backward() # 勾配計算
optimizer.step() # 勾配によるパラメータ更新
optimizer.zero_grad() # 勾配を0にリセット
PyTorch Lightning
章の最後にPyTorch LightningとTensorBoardが登場します。
Trainerクラスを利用してモデルの訓練や評価がしやすいとのことです。
残念なことに、テキストの大半はこれらのツールを使っていないこともあり、まだこのツールたちと仲良くなれていません。。。
落とし穴
この章にも、テキストのサンプルコードが実行時エラーになる事象に遭遇しました。
テキストでは、torchmetricsのaccuracyクラスに必要な引数を渡していない模様です。
そんな落とし穴の詳しい対処方法は、↓このブログ↓で詳しく書いています。
14章 画像の分類-ディープ畳み込みニューラルネットワーク
14章は畳み込みニューラルネットワーク:CNNで画像の分類タスクを実践します。
ディープラーニングっぽいタスクを実践できると思うと、胸が高鳴ります。
しかし、このころから、GPU非搭載のパソコンでは訓練処理時間がものすごく掛かるようになり、ディープラーニングの現実を体感する章になりました。
畳み込みディープラーニングによる画像の分類
予め準備された「顔画像とその画像が笑顔かどうかのクラスラベルのデータ」を用いて訓練したモデル。訓練済みモデルを利用して別の顔画像から笑顔かどうかを予測できる。
こんなモデルを作ります。
訓練処理時間がかかりすぎる落とし穴
GPU非搭載パソコンでは訓練が終わらない(処理途中で断念せざるをえない)事態に悩まされました。
Google ColabのGPUを求め始めたのもこのころです。
結局、最後まで訓練できないまま、この章を閉じることにしました。。。
心残りです。
GPU付きのコンピュータがほしいです。
if torch.cuda.is_available():
model = model.to("cuda")
離散畳み込み計算
また、2次元の離散畳み込み計算をプログラムコードを使って実行してみたところ、テキストのコードが予想外の動きをするという事態に直面したのも12章の思い出です。
この記事にまとめています。
15章 系列データのモデル化-リカレントニューラルネットワーク
15章はリカレントニューラルネットワーク:RNNによる自然言語処理です。
RNNは文章の並び=系列を記憶して学習できるアーキテクチャです。
これまたディープラーニングっぽい内容です。
ところで、PyTorchのテキストデータ処理のツール「torchtext」の機能がテキスト掲載時から大きく変化していました。
この変身が、15章をラビリンスにしてくれたのです。
テキスト自動生成
ジュール・ヴェルヌの小説を学習して、新しい文章を生み出すモデルをつくったことは、とても面白かったです。
なんてったってAIっぽいところがよいのです!
しかも、とても詩的な文章が生まれました。
感動です。
詳しい内容はこの記事に書きました。
落とし穴
torchtextの迷宮が作り出した幻想の落とし穴にはまりました。。。
そして、GPU非搭載パソコンの処理時間問題にも直面しました。
実践したときはバタバタして大変でした。
いま、振り返ってみると、このバタバタ感がPython機械学習のリアルなんだな、って落ち着いて受け入れられました。
詳しくはこの記事をご覧ください。
16章 Transformer-Attentionメカニズムによる自然言語処理の改善
引き続き自然言語処理です。
16章では、Transformersで学習済みのモデルに対して追加訓練=ファインチューニングをすることに取り組みました。
ちょっと道草
テキストの自然言語処理の対象は「英語」です。
テキストをこなす中で、何か物足りなさを感じていました。
それは、英語の文章を解読できないので、文章を生み出した実感が得られないことなのです。
そこで、テキストからはみ出して、日本語の文章生成のさわりを体験しました。
rinna社が2022年に公開した日本語用のGPTモデル「japanese-gpt-1b」を動かしてみました。
やはり、日本語の文章が自動的に綴られる様子は、楽しいです!
いずれは日本語モデルをファインチューニングをしてみたいです。
時間の限界
BERTモデルのファインチューニングの処理時間がものすごいことになりました。
遂に、全面的にGoogle ColabのGPUを利用することにしました。
きちんとBERTのファインチューニングが完了できて、感無量です。
この気持ちを記事にしました。ぜひお読みください!
17章 新しいデータの合成-敵対的生成ネットワーク
17章では敵対的生成ネットワーク:GANで画像を生成します!
AIの実践と言ってもよいでしょう!
この章では全面的にGoogle ColabのGPUを活用しました。
AIが育つ
GAN、GCGAN、WGANといったアーキテクチャをこなすことで、生成される画像の精度がどんどん高まっていきます。
好奇心が満たされる、そんな感じでした。
一方で、訓練時間も長期戦になります。
Google ColabのGPUを利用しても、訓練に3時間ほどかかりました。
詳しくはこの記事をお読みください!
PyTorch、PyTorchの関連ツール、処理時間などに戸惑いつつでしたが、文章自動生成、画像自動生成といったAIっぽいタスクを体感できて、とても楽しい実践になりました。
いろんな意味でPyTorchに驚かされたのでした。
「急」へ続く
おわりに
AI・機械学習の学習でおすすめの書籍を紹介いたします。
「日本統計学会公式認定 統計検定2級 公式問題集[CBT対応版]」
【決定】新連載「のんびり統計」が始まります!
現在、数記事を書き溜めているところです!(10記事できました!)
新連載では「統計検定2級 公式問題集[CBT対応版]」をテキストにします!
統計学に興味をお持ちの方と一緒に学習を進める気持ちで書きます!
データサイエンスの基礎固めとして、また、データ分析の手始めとして、確率・統計を学んでみませんか?
最後まで読んでくださり、ありがとうございました。
この記事が参加している募集
この記事が気に入ったらサポートをしてみませんか?