Chris氏の機械学習アプリ開発における数々の成功と失敗から導き出された教訓は、以下のような6項目に集約されます。
- データの特徴を抽出する教師なし学習に安易に手を出さない。多くの場合、人間の直観に劣る。
- ニューラルネットワークにも安易に手を出さない。初心者には難易度の高い技法である。
- 問題を二値分類としてとらえる。3値以上に分類するマルチクラス分類より良いパフォーマンスを発揮することが多い。
- ハイパーパラメータを調整する。デフォルトのそれでうまく行くことはまずない。
- 実験にかける時間を見積もるようにしよう。機械学習開発の工数全体を見積もるよりは容易である。
- 実験結果をこまめに記録する。そうした記録がいつか必ず役に立つ。
以上のようなアドバイスを述べたうえで、いちばん重要なのは「試行錯誤を重ね、必要に応じて(自分の)限界を超える」こと、とChris氏は語っています。
なお、以下の記事本文はChris氏に直接コンタクトをとり、翻訳許可を頂いたうえで翻訳したものです。また、翻訳記事の内容は同氏の見解であり、特定の国や地域ならび組織や団体を代表するものではなく、翻訳者およびAINOW編集部の主義主張を表明したものでもありません。
目次
私のように何日、何週間、何ヶ月も無駄にしないで
私はスタートアップで3年以上機械学習業務を担当した。資金を調達し、いくつかのクールな技術製品を構築した。しかし、その過程で多くの時間を無駄にした。
会社の将来がかかっているときに機械学習を学ぶのは、それを習得するための最もリラックスした道ではない。
業務過程で、私はたくさんの失敗を犯してきた。失敗を犯しながらも、いくつかの成功もあった。
この記事は、そうした失敗と成功についての逸話的な経験にもとづくアドバイスだ。
この記事は実際の問題を解決したい人に最も適しているが、すべての機械学習の初心者を対象としたものでもある。
それでは論じていこう。
・・・
教師なし学習には近寄るな
教師なし学習には近寄るな。それは大きな時間の浪費であった。
AIの博士号取得者のみんなが助言してくれたにもかかわらず、教師なし学習を何度試しても価値はゼロであった。この分野では学術的な研究が盛んに行われているのだろう。そうでなければ、このパラドックスを説明できない。
教師なし学習とは、タグ付けされていないデータに対してモデルを学習することである。一般的にはクラスタリングを実行する。理論的には、これまで知られていなかったパターンを発見できる。
一方、教師あり学習では入力とタグ付けされた出力の関係を学習する。この技法は、どのような特徴がどのような出力に関連しているかを学習することを通して促進される。
私が関わった場合では、教師なし学習が人間の直観に毎回劣っていた。
それゆえ、この分野にはクールなアプリがあるかも知れないが、簡単に人間の直観に勝てるわけではない。他の場所で経験を積んでから、こうした教師なし学習に戻ってくるようにしよう。
・・・
ニューラルネットワークをスキップせよ
ニューラルネットワークが従来のモデルよりも優れているのを見たことがあるものも、得られる利益は小さい一方で、構築に必要な労力は大きいものであった。
ニューラルネットワークは、特にキャリアの最初の段階にあるAIエンジニアにとっては、以下のようないくつかの課題がある。
- 学習の反復が遅くなる。学習曲線は、新しいことに挑戦するスピードに関する関数だ。ニューラルネットワークは一般的に、従来のモデルよりも学習に時間がかかる。そのため、学習を反復する時間が少なくなる。
- オーバーフィッティングを避けるためには、大量のデータが必要。多くの場合、ビジネスを開始してから十分な時間をかけて大量のデータを収集する必要があるが、ほとんどの企業は事前にタグ付けされたデータを持っていない。
- 選択肢が多すぎる。ロジスティック回帰のハイパーパラメータの組み合わせは限られているが、ニューラルネットワークは無限に異なる方法で設定できる。ニューラルネットワークはウサギの穴のようなもので(※訳註1)、解決に至るよりも、迷子になってイライラしてしまう可能性が高い。
- 従来の機械学習モデルでもしばしば良い性能を発揮する。MVP(※訳註2)では、sklearnの既製モデルを導入するだけで十分な場合が多い。ニューラルネットを数週間かけてチューニングすることでF値を数ポイント上げることができるかも知れないが、最初のうちはその価値はあまりない。
- メンターを見つけるのは難しい。ニューラルネットワークは不思議な生き物だ。大まかな仕組みは誰でも知っている。しかし、実際の問題を解決するためにニューラルネットワークを使った経験を持つ人はほとんどいない。そのため、自力で解決しなければならない。
結論を言えば、私はニューラルネットワークに反対ではない。しかし、0から1を生み出す時ではなく、90から100にするために使おう。
すべての問題を二値化して分類する
モデルの学習をできるだけ簡単にしよう。最も簡単な問題は二値分類だ。
二値分類モデルとは、1か0を出力するものだ。二値分類の具体例は写真に犬が写っているか、いないかのどちらか、となる。
一方、マルチクラス分類では、写真に犬、猫、オウム、エミューが写っているかどうかに応じて、0、1、2、3が返される。
すべてのケースを扱う単一のマルチクラスモデルではなく、複数の二値分類器を並行して実行した方が良い結果が得られることが何度もあった。
最大の利益は正しいモデルを選ぶことではなく、正しい方法で問題の枠組みをとらえることから得られるのだ。
・・・
ハイパーパラメータを調整せよ
これが大きな違いを生む。
ハイパーパラメータは、モデル自体を対象としたレベルの設定だ。例えば、学習率などが該当する。
ハイパーパラメータの調整には、自動化ツールを使おう。そうしたツールはいくつかある(例:GridSearchCV、TPOT…(※訳註4))。
モデルを手作業でチューニングして時間をかけなくてもよい。チューニングの限界を設定して、実験をクラウド上で進めよう。
経験者からのアドバイス:エラーを救済するコードを書いたうえで、定期的に結果を保存しよう。私は、途中経過を保存しないで行ったクラウド上の実験が3日目でクラッシュして、結果を失ってしまったことを何度も経験した。
デフォルトのハイパーパラメータが最適であることはほとんどない。それらをチューニングしよう。
・・・
結果ではなく、試行するために時間幅を設ける
機械学習はソフトウェアエンジニアリングのようにはいかない。
問題を解決するのにどれだけの時間がかかるのか、時には解決できるのかどうかさえも予測できない。しかし、実験にかかる時間は予測できる。
機械学習で解決するまでの時間を見積もろうとすると、最終的にはトラブルになるだろう。企業のビジネスサイドにとって、必要な工数を過小評価するエンジニアほど迷惑な存在はない。
以上は単純なポイントではあるが、仕事しながら機械学習を学ぶ場合には重要なポイントである。
・・・
いつもいつもいつも実験を記録する
実験を記録しておけば、半年後にはそうした自分に感謝するだろう。
以下の項目を記録するのをおすすめする。
- モデル/アーキテクチャの選択
- ハイパーパラメータ
- データの大まかな説明(出典、サイズ、日付、特徴…)
- 結果(例:適合率、再現率、F値…)
- データに関するスナップショット(※訳註5)へのリンク(可能であれば)
- コメントと実験から学んだこと
記録するのに考えすぎないようにしよう。記録するにはスプレッドシートが有効だ。
そのうち、社長や新しいアドバイザーから、すでに試したことをやってみないかと言われることもあるだろう。しかし、前回なぜ失敗したのかは覚えていないだろう。そんな時、過去の結果を調べて提示することができれば、時間と手間を大幅に削減できるだろう。
また、事後報告を書くことで(時折、成功の報告をすることで)、学習効果を高められる。記録し続けることが、パターンを見極め、直観力を養うことにつながる。記録することこそが、長い目で見たときに「シニア人材」になるための条件なのだ。
・・・
結論
以上が、数年間にわたって機械学習を搭載したアプリを構築したことから得た私の学びの一部である。
私の経験はほぼ自然言語処理の分野に限られているが、これが他の分野にも応用できないわけではない。
私が読者諸氏に伝えたいことは、次のようなことである。最先端技術は素晴らしい結果をもたらすが、みなさんはまだその準備ができていないだろう。それゆえ、試行錯誤を重ね、必要に応じて限界を超えるのだ。
それでは、役に立つ技術を作ることに取りかかろう。
原文
『My Advice To Machine Learning Newbies After 3 Years In The Game』
著者
Chris The Data Guy
翻訳
吉本幸記(フリーライター、JDLA Deep Learning for GENERAL 2019 #1取得)
編集
おざけん