機械学習パイプラインのデバッガについての論文:Debugging Machine Learning Pipelines

タイトルの通り、機械学習パイプラインのデバッグを行うツールを開発した論文「Debugging Machine Learning Pipelines」を読んだ。
International Workshop on Data Management for End-to-End Machine Learning というワークショップで発表されている。

概要

機械学習システムの失敗原因はコードのバグや入力データ、パラメータ設定など様々な原因が考えられる。特にパイプラインが複数になったりすると原因箇所の特定が非常に難しい。

そこで、ML Systemにおけるfailureの原因を推測して簡潔な説明を提供する仕組みを開発。

機械学習パイプラインの例

具体的には、前回までの実行時の情報と結果や、まだテストされていないパラメータ値を提案することで原因を突き止めやすくする。このツールによって、データ、データ型、ライブラリバージョン、パラメータ値などの側面でパイプラインをチェックできる。

実際のアルゴリズムとしては、いくつかのパイプライン実行からエラーっぽい実行結果を抽出して、未テストのパラメータ群をある時間制約の中で実行して原因を突き止める。最終的に、複数の原因が見つかったら、最小限の原因をブール式の形で提示する。

処理の説明

色々と定義が書かれているが、簡潔に言うと、以下の通り。

  • MLパイプラインのプロパティを設定してCVの値が一定以上なら成功とする。
  • 成功した時のパラメータ、失敗した時のパラメータからどのパラメータのときに失敗するのかの候補を最小限のブール式で提示する。

具体的には決定木のように条件文を構築して、上手くいった場合のプロパティと失敗した場合のプロパティから最小の原因となるブール式を求めている。
作成された決定木は重複部分が多く出てきて可読性が悪いため、Quine-McCluskeyのアルゴリズムというものを使って、まとめられる部分をまとめてブール式にする。

決定木形式での原因特定

既存の研究との違いは、このML Debuggerは上手くいかないケースを探すことにある。既存研究は上手くいくプロパティの設定を探すが、著者らは最小の原因を探すためには上手くいくケースはあまり役に立たないためであると論じている。

実験結果

FineOneという原因の少なくとも一つを当てるタスクではF値1.0と他のフレームワークよりも良い結果が出ている。試行回数を制限するケースではF値は1.0よりも下がるが、依然として他のフレームワークよりも良い結果が出ている。全ての原因を見つけるFindAllというタスクでも同様の傾向が出ている。

実験結果の一つ。他のフレームワークよりも良い結果が出ている

他のフレームワークとの比較を考察すると、最小の原因群を出すのが苦手だったり、否定や不等式が扱えないなどの欠点があることが分かった。

所感

他のフレームワークはベイズ最適化のような手法を使ってパラメータを探索するものもあるというが、本手法は特にベイズ最適化などを用いることなく、失敗したところの近傍を調査するという手法で良い結果が出ているのは面白い。

データサイズが大規模になると、このようにイテレーションを回して原因を追及するということが、本質的に難しくなりそうなのでそのような場合を想定した研究を探してみたい。

著者らは今後の方向性として、何らかの実行環境に組み込んでユーザに使ってもらうことを考えているというので、近い将来このようなフレームワークを使って機械学習パイプラインをデバッグする時が来るのだろうか。

Embeddingの違いによる後段タスクへの影響推定:Understanding the Downstream Instability of Word Embeddings

MLSys 2020の論文より。Embeddingが異なった場合、後段のNLPタスクに対してどれだけの影響があるかを、後段モデルの訓練を行わないで推定しようという論文の「Understanding the Downstream Instability of Word Embeddings」を読んだ。

概要

トレーニングデータが少し変わっただけでモデルの性能が不安定になったりする現象がある。この論文では、自然言語処理モデルにおいてEmbedding層のサイズとトレーニングデータの変更による性能低下に関係性があることを調査した。
そのような関係性を、理論的に説明するために、eigenspace instability measureという指標を導入して後段の予測がどの程度変わるかを予測することができることを示した。

この手法は、 knowledge graph や contextual word embeddingのような他のembedding手法にも、この指標は拡張できることを示している。

そもそも、word embeddingが近傍何単語でトレーニングするかといったパラメータによって大きくパフォーマンスが変わってくることが分かっている。しかしその影響が、後段のNLPタスクにどの程度の影響が出るかが検討されていなかった。

例えば、embeddingのトレーニングに1%のデータを追加しただけで、感情分析タスクで15%の違いが出るようになった。この論文では、メモリ使用量とのトレードオフも調査されており、2倍のメモリを使うようにしたところ5~37%程の性能低下を抑えることができるようになった。

この論文で提唱されている、eigenspace instability measureは二つのword embeddingの固有空間がどれだけ重なるかを表した指標である。これを用いると、どの程度embeddingが変化したかが分かり、さらに下流のモデルを再学習することなくdimension-precisionパラメータを選択できるようになる。

この指標は他の指標で選んだパラメータに比べて、後段のタスクの性能低下が少なく済んでおり、なおかつ理論的にこの指標とモデルの性能に関係性があることを示している。

前提

WordEmbeddingのアルゴリズムの解説や、 圧縮技術としてuniform quantizationを利用などが解説されている。

また、WordEmbedding同士の距離の測り方として、以下の4種類を活用して比較実験している。

  • k-Nearest Neighbors(k-NN) Measure
    ランダムにサンプルされた単語に対してk個の近い単語を2つのEmbeddingから出して、どれだけ重なりがあるかを測る指標
  • Semantic Displacement
    Orthogonal Procrustes Problemを解いて、二つのEmbeddingが近くなる変換行列を求めて、それをかけたときのコサイン距離の平均を取る指標
  • Pairwise Inner Product Loss
    二つのEmbeddingのグラム行列同士の差分をノルムを取った値
  • Eigenspace Overlap Score
    特異値分解して得られた行列U同士を掛け合わしてノルムを取った値

実験

Semantic AnalysisとNamed Entity Recognition のタスクを後段として実験している。 Embeddingの次元数を25, 50, 100, 200, 400, 800と変化させて実験。Precisionも1bit~32bitまで変化させて性能がどう変わるかを確認している。

コーパスにはWikipediaの17年と18年のデータセットを用いて、コーパスが変わったとみなしてどれだけ相違があったかを示したのが、論文中Figure1。

次元数とPrecisionが上がるにつれて、相違が減る傾向が見て取れる。Precisionが4bitを超えたあたりから影響は小さくなってきている。若干の違いではあるが、2倍精度を上げた方が、2倍の次元数にするよりも性能低下が抑えられている。同じメモリ消費量であっても、トレードオフ関係で相違が3%位出ることもある。

Analyzing Embedding Instability

Eigenspace Instability Measureという指標を定義している。これは、各Embeddingを特異値分解して左特異ベクトルの張る空間がどれだけ重なっているかを示す指標となる。

このように定義するとそれぞれのEmbeddingを利用して訓練した線形モデルの誤差の差分がEigenspace Instability Measureに比例することが証明できるという。

実験してみるとk-NN指標と同等程度の結果となっている。k-NN指標は理論的な裏付けがないため、本提案の方が優れていると主張している。
そのほかにもknowledge graph や contextual word embedding(BERT)のような他のembedding手法にも、この指標は拡張できることを示している。

所感

2つのEmbedding間の後段タスクに与える影響を、後段のモデルをトレーニングすることなしに予測できるのは、どのEmbeddingを使えばよいかの選択に有用だと感じた。理論的なバックグラウンドがあるのが本手法の優れたところと著者らは主張しているが、k-NN Measureも直観的には2つのEmbeddingがどれだけ近しいかを表していると理解できるように思え、なおかつk-NNの方が全体的に精度が良いタスクがあるため、常にこの論文で提案されているEigenspace Instability Measureを使えば良いというわけでもなさそうである。

ニューラルネットワークのPruningをメタアナリシスした論文:What is the State of Neural Network Pruning?

MLSys 2020という学会で発表された面白そうな論文を読んだ。タイトルは「What is the State of Neural Network Pruning?」で、Neural Network Pruningについてメタアナリシスを行った論文。

概要

pruningに関するメタアナリシス論文。標準化されたベンチマークやmetricsが無いことが分かった。そこでShrinkBench(https://github.com/jjgo/shrinkbench)というオープンソースのpruning評価用のフレームワークを作成した。

著者らは81本のpruning論文を調査したところ、データセットやネットワークの比較の無いものや、他のpruning技術との比較が無いものなどが多く、適切にどの手法が良いのかを比較することが難しかった。

Pruningについて

pruning手法は大体pruneとfine-tuneを繰り返す手法が多い。 pruneの仕方にはsparsity structure, scoring, scheduling, fine-tuningの4つの観点で選択ポイントがある。

structure

ランダムにパラメータを削減する手法だと、現代のH/Wでは速度向上につながらない可能性がある。そこで、何らかの構造的なグルーピングからパラメータを削減する手法がある。

Scoring

重みの係数やgradientsなどから不要なパラメータを抽出するのが一般的。局所的にスコアを比較する手法や、大局的にスコアの低いパラメータを探し出すなどの手法がある。

Scheduling

何ステップごとに枝刈りを行うかも一つのポイント。複雑な関数によってSchedulingを決定する手法も出てきている。

Fine-tuning

枝刈り前の状態からファインチューニングするのが一般的だが、もっと前の段階や初期状態からファインチューニングする手法も提案されている。

評価指標

ストレージサイズを重視するのか、推論速度を重視するのかなど、様々な指標が存在しうる。そこには効率と質のトレードオフが存在する。FLOPsや画像分類のTop-1~5の性能で測られることが多い。

Lessons from the Literature

Pruningの効果

論文を調査していくと、pruningは効果があるということが分かった。小規模なpruningによって性能が向上した例もあったという。
ファインチューニングする手法の方がランダムに初期化して再学習するよりも効果的な例の方が多い。
パラメータ数を固定して比較した場合、スパースなモデルが密なモデルよりも性能がいいことがある。
しかし、モデルアーキテクチャを改善した場合(ResNet vs VGGのようなケース)の方がpruningよりも効果的な傾向にあった。

Missing Controlled Comparisons

しっかりとした比較が行われることが少ない。これは標準化された結果報告基準がないためだろうと述べている。

2010年以前の論文と比較されづらいのに加えて、近年の手法であっても比較されていない論文は多い。データセットもImageNetやMNISTで比較されることが多いが、MNISTはグレイスケールだし単純なモデルでも99%の精度が出たりするので、実験対象として適切ではない。データセットと評価指標が論文によってバラバラなので適切に比較することが困難である。また、モデルやデータセットが同じであっても、augmentationやハイパーパラメータ、使用するライブラリによって差が出るので直接比較が難しい。さらに、微妙な違いであっても、改善率1%以下を報告している論文が多いので、もともとのモデルの性能で大きく結果が左右されることになる。

そのほかにも、ResNetやVGGと述べられても、複数のバリエーションが存在するので一意に特定することができない。また酷いものだと存在しないようなアーキテクチャを既存のモデルとして述べているようなものもあったという。

それに加えて、 モデルの圧縮率や速度向上も論文によって微妙に定義が異なっていることもあり、比較の妨げとなる。

ではどうするか?

著者らは以下のような指針を定めて、手法を比較することを提案している。

  • アーキテクチャ・デーセット・メトリクスを正確に決める。
  • 少なくとも3つのペアの大規模データセット・最近のモデルで比較する
    圧縮率と速度向上の計算式を定義する
  • ImageNetではTop-1とTop-5を報告する
  • メトリクスを報告する際は、prune前のモデルの同じメトリクスを報告する
  • 比較対象とする手法と一緒にトレードオフのカーブを図示する
  • トレードオフカーブは5段階の圧縮率でプロットする
  • 報告する数値は平均と標準偏差も出す
  • 同じライブラリ、データ読み込みなどできるだけコードを比較対象とそろえる。

これらの比較が出来る環境としてShrinkBenchというフレームワークを作成している。

ShrinkBenchを使って実験したところ、以下のような発見があったという

  • 圧縮率と速度向上のトレードオフは完全に相関するものではない。なのでどちらか一方だけではなく、両方を報告する必要がある。
  • データとモデルの組み合わせによって、有効なpruning手法が変わる場合がある
  • 初期モデルの重みによって手法の優劣が変わる場合がある。
手法比較の一例
圧縮率と速度向上は必ずしも完全な相関関係にあるわけではないことを表している。

所感

pruningは近年非常に重要な研究分野で論文も多く出ているが、このようにメタアナリシスを行うとどの手法が良いと一概にいうことは難しいかもしれないと感じた。

ただ新しい手法を考案しても計算量の問題もあって多くの既存研究と比較するのはコストが大きいため、この論文で提案されているようなShrinkBenchのようなフレームワークを研究者が活用して、統一的なスコア報告がなされるようになると研究がもっと進みやすいかと思われる。

文字認識をWatermarkで騙す手法の論文:「Attacking Optical Character Recognition (OCR) Systems with Adversarial Watermarks」

Attacking Optical Character Recognition (OCR) Systems with Adversarial Watermarks」という論文を読んだ。

概要

OCRシステムを騙すためのAdversarial Exampleを作成する手法の論文。OCRにかけるような文書は写真などとは異なり背景が白・文字が黒、となっているので写真データに対するAdversarial Exampleの手法を使うと、人間が見ておかしいことに気づく。
そこでこの論文ではWatermarkと呼ばれるスタンプを文書に付与することで、文書読み取りの結果を改変することを目指している。
Watermarkは例えば「Sample」や会社名みたいなスタンプを文書に重ね合わせる。そのWatermarkと重なる部分のピクセルを上手い具合に変えると、文書の意味を反転するような形でのAdversarial Exampleをいくつか作成できている。

基本的には評価はモデルがホワイトボックスだと仮定したうえで行っているが、ブラックボックスのOCRシステムとしてTesseract OCRに対してもWatermark を付与したAdversarial Exampleが働くことを確認している。ブラックボックスシステムに対しては、ホワイトボックスモデルに対してAdversarial Exampleを作成して、そのAdversarial Exampleを入力とすることで確認している。

アルゴリズム

具体的なアルゴリズムとしては、元文書とAdversarial Exampleのノルムを閾値以下である・Watermarkの中に含まれるピクセルをのみを変更する、という制約の下でCTC loss functionと呼ばれる最終層で出力される値から正解のデータ列になりうる確率を元に計算する損失関数を最小化するように最適化問題を解いていく。論文では、再急降下法+モーメンタムのようにして文書ベクトルを更新していくと述べられている。

実験結果

具体的な実験では以下の図のように、いくつかの文の意味を変えるように改変することができたことを示している。免許証の番号を変える例も示されている。

Future Work

この論文ではWatermarkの位置は固定なので、任意の箇所を改変できるようになっていないが、今後は自由な位置・形状でWatermarkを追加することも考えている。

所感

WatermarkがつけられたらそもそもOCRは上手くいかなさそうなので、Watermarkがついた部分は人間がチェックするべきではないかと思った。手法としてWatermark付与以外にも文字のエッジの部分を改変することで、印刷がかすれているように見せかけて人間とOCRを騙す方法も述べられており、これが進んでいくと悪用される可能性もありそうに思った。

論文読み:Squeeze-and-Excitation Networks

元論文:Squeeze-and-Excitation Networks

最近良くCNN関連のタスクでよく使われる手法なので、論文を読んでみたときのメモ。
ググると他にも詳しい解説記事があるので、あくまでも個人的なメモとして残します。

概要

Squeeze-and-Excitationブロック(SEブロック)というモジュールを導入することで、明示的にチャンネル間の相互作用をモデル化できる手法。
チャネル間の相互作用はイメージがつきにくかったが、例えばある特徴マップとまた別の特徴マップが同時に強く反応する場合に、特定のクラスと判定されるといったケースだろうか。チャンネル方向でSEブロックの処理を行うことで、チャンネル間の相互作用を表せるということのようだ。
SEブロックい色々なCNNに組み込んだSENetは様々なデータセットに対して効果的であったことを確認した。既存のCNNに少しの計算コストを追加するだけで性能を高めることもできた。

Introduction

CNNは画像認識の分野で広く使われている。CNNは畳み込みフィルタによって局所的な特徴をつかみ、層を重ねることで局所から大局までの広い範囲の画像特徴をつかむことができる。近年は高精度なネットワーク構造を作ることが研究のフロンティアであるが、いくつかの研究では既存のネットワークにモジュールを追加することで精度向上を目指す取り組みもある。

この論文で提案されたSEブロックはそのような取り組みの一つにあたる。SEブロックは特徴の再調整(論文ではfeature recalibrationと書かれている)を果たすように設計されている。

論文中Fig.1にあるように、SEブロックは特徴マップを受けとってチャンネルごとに空間情報を凝縮する(Squeeze)。そして、Excitationと呼ぶ操作によりチャンネルごとの重みづけを行ったベクトルとしてSqueeze後の情報を変換する。これによって生成されたベクトルを元の特徴マップにかけ合わせることで、特徴マップがチャンネル間の相互作用をモデル化することができる。つまり価値の高いチャンネルを強調することで表現の質を挙げることを目指している。
目的に応じてSEブロックをどこに配置するかを決めることもできる。例えば、ネットワークの初めの方の層にSEブロックを入れると、クラスに依存しない局所的な特徴を共有することができ、後ろの方の層に入れるとクラスに依存した特徴の相互作用を共有することができる。

Related Work

モジュールを追加することでネットワークの性能を向上させる手法は色々と研究されている。多くの手法はチャンネル間の相互作用はクラスに無関係な関数の合成で表すことができると仮定しており、チャンネル間の相互作用を取り入れていない。一方、この論文では、チャンネル間の相互作用を非線形の変換を用いて調整することで、効果的に学習を進めることができるようになるというのが著者らの主張。

Squeeze and Excitation Blocks

Squeeze: 各特徴マップはフィルタがかけられた局所的な部分の情報の集まりであり、大局的な情報を持っていない。そのためSqueeze処理でチャネルごとの統計情報を取得する。具体的にはGlobal Average Poolingをかける。もっと複雑な処理を使っても良いかもしれないと著者らは述べている。

Excitation: 非線形なチャネル間の相互関係を学習し、複数チャネルが強調されることを許可するような設計になるように、ReLUを挟んでSigmoidを使っている。2層の全結合層で途中で削減率rをもちいてネットワークをいったんくびれさせている。

そして最後に元の特徴マップにSEブロックの結果をかけ合わせることで、特徴マップを強調することができる。
前述の通り、SEブロックはCNNの特徴マップを出力するところなら組み込むことができ、VGG, Inception, RexNet, ResNeXtなどに適用できる。

Model and Computational Complexity

SEブロックを追加してもパラメータ数の増加はSE-ResNet-50で約10%程度。推論速度も数ミリ秒程度の増加に抑えられており効率的。
SEブロックをCNNの最後の方に置くと、特徴マップの枚数が多いため計算量がその分増えるが、最後の層にSEブロックを追加するのを止めても性能はそれほど変わらずパラメータ数を削減できると論文中で議論している。

Experiments

様々なデータセットでSEブロックを追加してあげることでSoTAを達成した。

Ablation Study

Ablation Studyとは構成要素を1つだけ抜いた手法を比較すること。他のパラメータを固定して、あるパラメータを変化させた場合の挙動を調査している。
Reduction ratio r: Reduction ratioを増やしていくと精度は落ちていくが、線形の関係ではない。Reduction ratioが小さいと精度が上がるがパラメータ数が増える。16くらいが精度とパラメータ数のバランスが良いと述べられている

Squeeze Operator: Global Average PoolingとGlobal Max Poolingを比較したが大差はない。ここの選択にはSEブロックは頑健

Excitation Operator: 最後のSigmoidをReLUやTanhに置き換えた結果が示されているが、Sigmoidが一番良い。

Different Stages: ResNetのステージのどこにSEブロックを入れるかで実験しているが、どこでも精度は向上する。どこに入れるかは互いに補いあう関係なので、複数個所入れると精度がさらに上がると述べられている。

Integration Strategy: SEブロックをどこに入れ込むか。大差がないので、入れ込む一に関しては頑健だろうと述べている。

Role of SE Blocks

SEブロックの役割を現実的なレベルで理解するための考察が述べられている。Global Average Poolingを行わないNoSqueezeというモジュールを構成し、精度を見るとSEブロックよりも下がる。これはSEブロックが特徴マップ全体の情報を活用していることを示している。また、Excitationの理解のために、ImageNetの異なるクラスの画像に対して特徴マップが各層でどのように反応しているかを見ている。

Conclusion

SEブロックは強力。チャネル間の相互関係を利用した精度向上手法であり、今後はこのような方向性の研究が出てくることを期待している。著者らは最後にチャネルの重みづけを、ネットワークの枝刈りに使えるのではないかと提案している。

所感

非常に簡単な構成で、精度が向上するのが驚き。Kaggleなどでも使われるようになってきており、解説記事も多いので理解はしやすかった。

外れ値処理の一手法:Winsorizingについて

機械学習や統計の分野における外れ値処理の手法の一つとしてWinsorizingと呼ばれる手法がある。日本語の解説が少なかったので書いてみる。

手法自体は非常に簡単で、外れ値を外れ値以外の最大値・最小値で置き換えるというものである。表形式データを考えると、単純に外れ値を除去するよりも、データサイズが少ない場合はほかのカラムの情報を有効活用することができる。

ちなみに英語版のWikipediaにはページが用意されている。
https://en.wikipedia.org/wiki/Winsorizing

このページにあった例を見てみると、numpy配列の上下5%のデータを最大値と最小値で置き換える方法が書かれている。

import scipy.stats
import numpy as np 
a = np.array([92, 19, 101, 58, 1053, 91, 26, 78, 10, 13, -40, 101, 86, 85, 15, 89, 89, 28, -5, 41]) 
scipy.stats.mstats.winsorize(a, limits=[0.05, 0.05])

1053が101に、-40が-5へと置き換えられる。
少し考えるとわかるが、単純に外れ値を除去して平均を取った場合とWinsoringをしてから平均を取った場合では値が異なる。

【書評】中国のAI技術と進むべき方向性:「AI Superpowers: China, Silicon Valley, and the New World Order」

最近、アメリカのAmazonで話題となっている「AI Superpowers: China, Silicon Valley, and the New World Order」という本を読んだ。
色々と面白い内容が多かったので、ここに書きたいと思う。

まず、この本の著者であるDr. Kai-Fu Leeは台湾で生まれてアメリカのカーネギーメロン大学で音声認識の分野でPh.Dを取った、人工知能の専門家である。現在はベンチャーキャピタリストとして北京を活動拠点にしている。
著者がどんな人かを手っ取り早く知りたい人は以下のTED動画を観ると良いと思う。
https://www.youtube.com/watch?v=ajGgd9Ld-Wc

この本を読むと、とにかく中国のAI活用がものすごいペースで進んでいるということが分かる。もちろん、筆者が中国をベースにビジネスをしていることを割り引いて考える必要はあるかと思うが、筆者の中国がAI実装の分野で力を付けていくだろうというビジョンは本書を読むと説得力がある。
筆者はディープラーニングによる世の中のシフトは、2つの変革として表れていくだろうと述べている。すなわち、「発見の時代から実装の時代」のシフトと「専門家の時代からデータの時代」へのシフトである。

今現在も続いている専門家がアルゴリズムを考えて、新たな有効な機械学習手法を編み出していく時代から、その手法を実際に社会実装していく時代が来るだろうとの考えから、このシフトを筆者は考えている。最近は多くの研究者がarxivなどに論文を学会で発表する前に載せており、コード実装を公開する例も多い。インターネットさえあれば、それらの世界最先端の技術を学ぶことができ、ビジネスに応用していくことが出来る時代である。

ビジネスとして最先端の機械学習の成果を利用するには、必ずしも最先端の研究者が必要なわけではない。筆者は「Today, successful AI algorithms need three things: big data, computing power, and the work of strong — but not necessarily elite — AI algorithm engineers.」とも述べている。
このように機械学習の社会実装という面だけで考えれば、中国はアメリカに劣っていないという。また、研究面でも中国出身の研究者が多くの論文を発表するようになってきており、AAAIというAI関連の有名な学会の日程が旧正月と被るために日程を変更せざるを得なかったという象徴的な出来事があった。
https://www.theatlantic.com/technology/archive/2017/02/china-artificial-intelligence/516615/

このようにAI研究や社会実装で中国の力が伸びてきており、半分冗談であるが「中国がシリコンバレーにAI研究でどれほど遅れているか?」と聞かれた中国の実業家は「16時間」と答えたらしい。これはカリフォルニアと北京の時差である。「When asked how far China lags behind Silicon Valley in artificial intelligence research, some Chinese entrepreneurs jokingly answer “sixteen hours”—the time difference between California and Beijing.」と答えたらしい。

また、中国企業のハードワークさも今後のビジネスの行方に有利に働くと考えている。筆者に言わせると、中国企業に比べてシリコンバレーの企業はとてもゆっくりと怠けて仕事をしているスピード感の違いを感じるそうだ。また、非常に熱心に学ぶ中国の学生やエンジニアの話も紹介されており、英語圏の著名なAI研究者の動画などにはすぐに中国語の字幕や翻訳が出るとのことで、将来性ももちろん感じる。この辺りの話を読んでいると、高度成長期時代の日本の姿に重なるものを感じる。
もちろん筆者だけでなく、世の中の著名な人物も似たような評価を下している。たとえばエリックシュミットは講演のなかで「Trust me, these Chinese people are good. . . . If you have any kind of prejudice or concern that somehow their system and their educational system is not going to produce the kind of people that I’m talking about, you’re wrong.」と述べたそうだ。

この本のなかでは、一体何が中国をAI実装の分野で強くしているのかといったことが書かれている。例えば、独自の文化圏、国家主導の仕組みづくり、テクノロジーを一段飛ばしで来たこと、データを使われることへの許容、ハードウェアに強い深圳を持つこと、などなど様々な点が強みとして挙げられている。
例えば、独自の文化圏として、昔の話であるがグーグルサーチは中国市場を単なる一地域としてしか見ておらず、本格的なローカライズのペースが遅かったと言う(ちなみにこのころは著者はGoogle Chinaで働いていたそうだ)。通常、検索結果をクリックするとそのページへ飛ぶが、中国人は検索結果を「ショッピングモール」のようなものだと思っており、検索結果をクリックしてもそのサイトは別タブ・ウィンドウで表示され、検索結果のページが残ったほうが効果的であったという。Baiduはいち早くそのように実装し、Googleに対して優位性を取ったという。
また、国家主導の仕組みづくりとしては、地方自治体が競うようにしてITベンチャーを簡単に設立できる特区のような地域を作るなどして、ベンチャー企業が数多く設立される仕組みを作っている。

テクノロジーを一段飛ばしで来たことは、例えば多くの人にとってはデスクトップやラップトップを経由せずにスマートフォンがメインのデバイスとして使われるようになり、スマホ特化のアプリやベンチャーが生まれたり、クレジットカードを経由せずにQRコードによる支払いが進んでいくようになったことなどが挙げられる。
データを使われることへの許容とは、直接的に言及されていないが中国政府による検閲やプライバシーといったものの意識が近年まで問題になっていなかった背景などもあり、企業に個人データを使われても、それで便利になるならば許容する精神が西側諸国よりかは大きいのだと思われる。
また、深圳はハードウェアのメッカとして知られているが、現状では他国の企業に比べて中国企業は文化・言葉などの面でビジネスをしやすいという。他国が苦労しながらもハードウェアを深圳で作ろうとしている間に、中国企業は様々なトライアルアンドエラーを行ってAI技術を用いた新しいデバイスを作れるようになるだろうと著者は予測する。
このほかにも今後数年~十数年のうちに実現するであろう、AI技術を社会実装した例なども挙げられており、専門家の目から見た将来像を学ぶ上で有益な一冊であると言える。

後半は前半とは大きく変わって、著者のTEDトークにもあったステージ4のがんであると診断された後に気付いた人生の目的やそれに向けたAI活用の話になってくる。著者は、がんと診断される前は仕事一筋で、どれだけ自分が社会に与える影響を最大化できるかといったことだけを考えて生きてきたという。しかし、人との関りや家族友人を大切にすることこそが一番重要だと思うようになったと語る。よく言われていることだが、死の間際にあの時もっと働いていれば良かったと思う人はほとんどいない。
そういった出来事を踏まえて、AIの発展した時代には人間は人との関わりを活かした仕事を進めていくべきであると言う。例えば、誰もステージ4のがんを機械に宣告されたくないはずで人間的なアプローチを持った仕事は残っていくし重要であるだろうと予測している。この辺りはTEDトークを見てもらえれば良く分かると思う。

個人的にはこの本がアメリカのAmazonで大ヒットしている現実を見ると、やはり欧米諸国は中国とパートナー関係を結んでビジネスを進めていこうという流れが出来てくるだろう。最後の方にもこの本のタイトルである「AI Superpowers」は決して、冷戦や宇宙進出の競争の時代にあったような対立関係を煽るものではなく、米中で協力してAI技術を発展させていくべきであるとも述べている。そうなった際に置いてけぼりにならないように、日本企業が中国企業から学ぶべきところは多いだろうと思う。

Kerasで転移学習をする際にはpreprocess_input()を呼ぼう

画像に関するタスクを扱っている際に、事前学習済みの重みを利用した転移学習を行うことは良い精度を出すことが多く広く使われています。Kearsには学習済みのいくつかのモデルが用意されており簡単に転移学習を行うことが出来ます。

(https://www.kaggle.com/amadeus1996/fruits-360-transfer-learning-using-keras)

公式のサンプルなどを見れば問題無いのですが、この事前学習済みのモデルを使う際にはpreprocess_input()という関数を呼び出して画像に対して前処理を行うことが想定されています。しかしながら、いくつかのブログ記事などを見たところpreprocess_input()を呼ばずに、転移学習を行っている記事があったため今回この記事を書きました。厄介なことに、preprocess_input()を呼ばなくても、VGGやResNetなどの高容量なモデルは前処理分の処理を学習するようで割と良い精度を出します。本質的には前処理しないことで、無駄な訓練が行われていることになるので、忘れずにpreprocess_input()を呼ぶべきでしょう。

ちなみにpreprocess_input()の中では、モデルによって画像の正規化、ImageNetデータセットのRGB各チャンネルごとの平均値を引く、などの処理が行われているようです。

Batch Normalization と Dropout は併用しない方が良いという話

Deep Learningのモデルを訓練していたところ、思うようにvalidation lossが下がらないことがあった。色々と調べた結果、Batch NormalizationとDropoutを併用していたのが原因であったので、誰かの為に書いておく。

この論文その解説にある通り、Batch NormalizationとDropoutを併用するとパフォーマンスが悪化することがある。原因は、「Dropoutを行うことで学習時と評価時で分散が変わってしまう一方、Batch Normalizationは学習で得られた分散を評価時もキープしてしまうため齟齬が生じることが原因」とあり、言われてみればなるほどという感じである。

結論としては、DropoutかBatch Normalizationのどちらか一方だけで試してみてvalidation lossを下げようとするのが良さそう。Deep Learningを使えばすべて解決するわけではなく、パラメータチューニングやモデル構造のチューニングが良いパフォーマンスを出すためには必要だと分かる事例の一つ。

直感 Deep Learning

直感 Deep Learning」という書籍が出るそうです。翻訳版なので原著を調べてみたところ、「Deep Learning with Keras」でした。英語版の方は、以前読んでおりレビューも書きました。この本はKerasを用いて、画像識別、自然言語処理、時系列データの分析、GAN、強化学習など幅広くトピックがカバーされていて、Kerasの使い方を学ぶのにも役立ったと思います。

以前書いたブログ記事:Kerasによるニューラルネットワーク本「Deep Learning with Keras」を読んだ