雑記

PythonのAI人材になるために受けた研修を紹介する

AI Python 研修

とある会社のAI研修

どんな部署だったのか?

AI活用して異常検知を行う部署に配属されました。

ビジネスとしては、上にあげているような本を読んでアルゴリズムを実装し、実社会に役に立つようソフトを販売していくということでした。

この部署で活躍するために受けた研修の内容を紹介します。私はその時プログラミング未経験で、全て一から始めました。

研修の内容

研修の内容は「pythonによるプログラミングイントロダクション」の輪読会およびPython環境の構築でした。

環境の構築についてはこちらにまとめているので、合わせてご覧ください。

pythonをきれいに書くには
Pythonのコードを綺麗に書けるようになるために大切な3つのこと使っているIDEにコード検査ツールを入れる IDE(統合開発環境)とはわかりやすくいうとエディタで、コードを書く環境のことです。 ...

これと合わせて仮想環境の立ち上げについても学びましたが、本記事では割愛します。

Python言語によるプロラグラミングイントロダクション

研修に使った本がこちらです。大学の講義を想定して書かれている本でした。

学術的にプログラミング・アルゴリズムはどうなっているか説明する本です。なので、一人で読み進めるのではなく、輪読会形式で読み進めるのがいいと思います。特に後半部分は数学的素養と基礎知識がないとなかなか理解できないかもしれません。(逆を言えば、本気で本書に喰らいつけば、数学的な学びを得ることができます

難しそうに書きましたが、Pythonの書き方については序章で丁寧に触れてくれます。だから初心者でも始めることができます。

数学系・物理系出身の学生がはじめてプログラミングしてみたい時は、むしろ本書はベストプラクティスなのではないでしょうか。

本書ははっきり言って難しいです。ですがAI人材として培って欲しい基礎的なアルゴリズムは網羅されていると感じます。

以下、内容について触れていきます。

第1章 さあ、始めよう!

コンピュータは2つのことしかしない。覚えることと計算することだ。

そんな力強い導入から始まり、コンピュータやアルゴリズムとはなんなのかについて、概論的に語っています。ただたとえ話で平方根を用いてきます。文系殺しです。もちろん文系の人で理解している方も全然いらっしゃいますが・・・

そして最後に手作業でアルゴリズムを書いてみよ、という問題が与えられます。この本は時々手を動かして理解するような例題が用意されています。かなり面倒臭いですが、それに匹敵する学びはありました。一緒に読んでいる人と議論しながら学ぶとより良いと思います。

第2章 Pythonの概要

Pythonの実装について解説しています。

Python書いてゲームとか作って適当に動かしてみたい

という人であれば、本書はベストプラクティスではないかもしれません。

なぜなら難しく感じる書き方をしているからです。学術的です。例えば変数が定義されている名前空間をわざわざ図示したりしますが、数学に慣れている人でないと逆に混乱しそうです。

しかしすごくいいことを書いていますし大事なことを書いています。

文字列型のスライス、インデックス、乗算、比較など、すごく難しく感じるかもしれませんが、ちゃんと理解すると文字列型がなんなのか深く理解できます。このあたりを丁寧に書いている入門書は半々だと感じており、本書はしっかりと触れています。

その他、if分やfor分の書き方など、本章で紹介されているので、ここで基礎を身に付けることができます。

 

第3章 簡単な算術プログラム

この章で気づくのですが、ちょくちょくコードが間違っています(最新版では治っているかもしれませんが)。インデントが足りなかったりします。また、著者がPython以外の出身だから、Pythonでは不要とされているgetterやsetterが登場しますが、あまり良くない例です。ご注意ください。

ここでは実用的に使えるコードを書き始めます。

本書の例では二分探索という手法を用いて、平方根を特定するプログラムを書きます。二分探索法とは求められる解がどこにあるのか、特定の区間の中間地点を繰り返し求める操作を繰り返すことで、もっとも近い解を求める手法であり、アルゴリズムです。

またニュートン法というグラフの接戦を徐々に最適解に近づけていくように繰り返し処理を行う実装もします。

意味わかんねえ

はい、難しいと思います。しかし実装してみるとPythonコードは10行程度です。これを理解できると、アルゴリズムというものが少しは見えてくるはずです。

第4章 関数、スコープ、抽象化

この章で関数とは何か、グローバル変数とは何かということを学びます。すでに他の言語を習得されている方にとっては復習になると思います。

プログラミングを進めていく上で避けて通れない知識なので、この辺りまで心を折られずに読み進められると良いです。

回文(上から読んでも下から読んでも同じ言葉)かどうかを判別するプログラムを実装してみる節もあり、本書の中でも比較的わかりやすい章かもしれません。

第5章 構造型、可変性と高階関数

この章ではプログラミング言語を扱う上での難関、イミュータブル、ミュータブルについて学びます。

a=(1,2,3,[2,3])
a[3] = "a"  # これはエラー
a[3].append("a")  # これはエラーにならない
print(a)

上のコードはミュータブルとイミュータブルを理解するためのコードの一例ですが、この話は特に奥が深いです。難しく感じるかもしれませんが、それは本書が難しいからではなく、説明が難しい内容だからです。

普段意識せずともある程度のコードを書くことはできますが、この章の知識を持っていると、ある時リストやタプルの意味不明な挙動に惑わされずに済むかもしれません。

第6章 テストとデバック

ここ、あまり覚えてないんですよね。。pytestとテスト駆動開発の本があって、そっちで研修した気がします。

今見返してみましたが、いいこと書いてそうだなーという雰囲気でした。

第7章 例外とアサーション

この章もあまり覚えていませんが、raiseなどを使って例外処理を学びました。

第8章 クラスとオブジェクト指向プログラミング

オブジェクト指向の登竜門、クラスについて学べます。

本書ではPersonというクラスを実装し、人物にはどういう属性(名前とか)があるか、どういうメソッド(行動)があるかなど、クラスとして書いていきます。

結構王道の説明方法ですが、初心者の方はここで存分に嵌って悩んで大きくなると思います。私も最初はさっぱりでした。ただ、絵や漫画でもっとわかりやすく説明している本は多くあるので、M精神は必要かもしれません。

また、最後の住宅ローンのシミュレーションをします。ここは難しいので、クラスだけ理解したいという人は飛ばしてもいいかと思います。

第9章 計算複雑性入門

読み返しても若干うろ覚えでしたが、コンピュータの計算は一見なんでも早くできて簡単見えるが、「関数の実装によっては入力値に対して、計算時間が指数関数的に増えてたりするから気をつけろ」的な内容だったと思います。

この辺りの知識なくシステムを実装して、顧客データが増え始めたとか、機械学習データでもっと大きなデータを学習させたいとかなった時に、急に計算が終わらなくなる。なんてことにならないように気をつけろという話です。

第10章 いくつかの単純なアルゴリズムとデータ構造

みなさんvimでもsakuraエディタでもエクセルでも、「ソート」すると思います。

この章では実際にソートがどうやって実装されているか、Pythonコードを書いて理解することができます。アルゴリズムらしいアルゴリズムに触れることができます。

一般人
一般人
ソートなんてエクセルでできるじゃん

という人と

オタク
オタク
こんな仕組みになってんだすげー!

というオタクとに別れる章です。

第11章 プロットとクラス

Pythonを触る以上、計算や統計は大体の人がすると思います。そしてやはりグラフに描画することは欠かせません。本章では可視化に取り組みます。

ただ、今見返すとpylabというライブラリを使っていることに驚きました。結構MATLABが提供するmatplotlibが界隈で主流のような気がしていので。ただpylabについて少し調べてみましたが、決して悪いライブラリでもなさそうです。本書はこの後この描画ライブラリで進めていきますが、習得するというよりはググりながら使うライブラリだと思うので、さっと読み流してもいいかと思います。

第12章 確率、統計とプログラム

統計や数学を学生時代に学べなかったという人にとって、大チャンスの章です。標準偏差やガウス分布など確率、統計の基礎知識をPythonのコードを書き結果を描画して確認しながら学ぶことができます。

わかりやすいとは言ってません。数式を読む能力がないと厳しいとこが多々あります。それに確率を理解しただけだと、何が嬉しいのかよくわからないことも多く、人によっては達成感すら得られないかもしれません。

たしかに今時の機械学習系の優秀なライブラリを使えば、この辺りの知識がなくても実装はとても簡単です。

けれども確率に対する知識がないと、より深く知ろうとした時に確実に詰みます。

本当に機械学習系について学びたいのであれば、知っておいて損はないです。

第13章 ランダムウォークと可視化

ランダムウォークはシミュレーションを行う上での導入のようなものです。

前章について理解できた人であれば、そこまで難しい内容ではないかと思います。

結果に対しては「ふーん」くらいで終わる人が多いと思いますが、実行結果が可視化できるので、まあまあ面白いと思います。

第14章 モンテカルロ・シミュレーション

モンテカルロ法は乱数を用いてシミュレーション繰り返すことで解を求めていく手法です。機械学習のにも用いられているので、覚えておくべき内容です。

本章では王道のサイコロの例と、円周率を求める例を紹介しています。

第15章 実験データの理解

本章では取得したデータは、その対象の現象・ふるまいの一部でしかない可能性があるから気をつけろ。適したモデルを組むことは難しいんだ。という章です。

実験のサンプルデータから、その対象の振る舞いを関数で表現したい時にどうしたらいいか、例えば「1次関数で表現しようとしたら、データの振る舞いに適合しきれなかった。比例関係にないようだ」と気がつきます。そこでn次関数で表現して、プログラムに勝手に作らせてみたら、データのある範囲では正しそうな振る舞いですが、データのない領域においては、「そんなはずないだろう」と言った関数が結果として現れます。

AI Python 研修

難しい内容ですが、この辺りのことが学べます。

一番最初にバネの例えが出てきますが、曲者すぎるので無視してください。

第16章 うそ、真っ赤なうそ、そして統計

間違ってたらすみません。確か、グラフって結局見せ方だから気をつけてね。的な話です。

「グラフ 錯覚」で検索すると色々と出てきます。

本書ではデータサイエンティストとして知っておかなくては恥ずかしいことを、ちゃんと網羅しようとしてくれているのですかね。

第17章 ナップサック問題とグラフ最適化問題

2つとも分析界隈では基礎的な知識だと思います。

  • ナップサック問題は、あなたの容量の決められたナップサックに、容量(重さ)と金額の決められた商品群をどのように詰めるともっとも儲かるかという問題。
  • グラフ最適化問題は、例えば目的地までの経路でもっとも安くいく方法は何かということを、点と線(ノードとエッジ)を用いて計算する問題。

です。

これらは最適解を計算させる上での基礎的な知識で、それをPythonで実装し学ぶことができます。

第18章 動的計画法

すみません、ちょっと覚えてない上に読み直してもざっくりとしか理解できなかったため、ぼやかして書きます。

ナップサック問題はこの動的計画法に含まれる計算手法であり、それを拡張して学び直している章です。動的計画法自体は、計算した値をその後の計算に取り入れる手法であり、たとえば前述のナップサック問題だと、まず一番お金になるものをナップサックに入れた、その状態から再度計算がスタートするイメージです。(と解釈しました。)

第19章 機械学習はやわかり

最後の章は機械学習がなんなのか、今までの最適化問題の知識を踏まえて解説しています。

特徴量の話がまず最初にきて、世の中にある物や事象をどう数値に落とし込むかの話をします。その話を理解するのはそこまで難しくなく、物事を数字として捉えるというイメージが湧くようになるかと思います。

そのあとはニューラルネットワークほど高度な技術は出てきませんが、それよりももっと簡単な決定技だとか、k近傍法という手法を学びます。簡単とは言いませんが、Pythonコードを書きながら、かつ数学的基礎を理解し始めた人なら、長くても半日で理解できます。

今世の中に出回っている技術も、この話の拡張なんだなー数学ってすごいなー

ってなれたらゴールだと思います。

また、即実運用に使えるものではありません。ただ、他の機械学習ライブラリを利用していく時に、基礎として知っておくと、より深い理解に繋がるかもしれません。

終わりに

研修内容の紹介というより本の紹介っぽくなってしまいましたが、これを全て読みきった時に研修が終了しました。

頭を使って練習問題をこなしながらPythonコードを書くので、かなりコードを書く力培われたと思います。また機械学習がなんなのか、統計と確率ってなんなのかという入門書としては、いい本でした。

本当にPython・機械学習を極めて行きたければ、当然別の本も読み進めていかなくてはいけません。

私も今道の途中ですが、どんどん勉強していきましょう。

お読みいただきありがとうございました
ABOUT ME
hirayuki
今年で社会人3年目になります。 日々体当たりで仕事を覚えています。 テーマはIT・教育です。 少しでも技術に親しんでもらえるよう、noteで4コマ漫画も書いています。 https://note.mu/hirayuki