数学がわからない

日々の勉強をアウトプットする。

論文を読む"Distilling the knowledge in a neural network."⑬

背景

「蒸留(Distillation)」に関して、論文"Ravi Teja Mullapudi, Online Model Distillation for Efficient Video Inference."を読んだ。
その中で引用されていたモデル蒸留のために広く使用されている技術の論文として、次の論文を読み進めている。

[18] G. Hinton, O. Vinyals, and J. Dean. Distilling the knowledge in a neural network. arXiv preprint arXiv:1503.02531, 2015.

前回まで

Abstract

  • 背景

機械学習アルゴリズムは、複数の異なるモデルの推論を平均化することで性能が向上する(モデルのアンサンブル)。

  • 問題

モデルのアンサンブルは計算コストが高すぎる。

  • 従来手法

Caruanaらの"Model compression."は、アンサンブル内の知識を単一のモデルに圧縮することを示している。

  • 提案手法

従来手法をさらに異なる圧縮技術を用いることで発展させる。また、フルモデルとスペシャリストモデルとで構成するアンサンブルも提案。

  • 効果

MNISTでいくつかの驚くべき結果を達成。
商用音響モデルを大幅に改善。
スペシャリストモデルは迅速かつ並行して訓練することが可能。

1 Introduction

  • レーニングと展開、それぞれの最適化
    • 昆虫はそれぞれ全く異なる要件に最適化した幼虫形態と成虫形態を持つ
    • 同様に機械学習も、トレーニング段階と展開段階で要件は大きく異なるのだから、それぞれで最適化した形態を持てば良い。
    • レーニング用の面倒なモデルから展開用の単純なモデルへの移行戦略はRich Caruanaらの”Model compression.”で提案されており、これを「蒸留」と呼ぶ。
  • 機械学習における知識
    • 蒸留という有望なアプローチを阻害するのは、「モデルの中の知識と学習されたパラメータを区別してしまう傾向」。
    • 知識とは「学習済みマッピング」である。
    • だからこそ、不正解に対する確率もごくわずかであれ定義されてしまう。
  • モデルを一般化する正しい方法
    • 目的関数はユーザーの真の目的を反映すべきであるが、実際は反映できていない。
    • モデルを一般化する正しい方法に関する情報が必要であるが、普通は利用不可能。
    • ただし、大きなモデルを学習済みで、蒸留によって小さなモデルを作る場合、大きなモデルの学習に用いた方法が小さなモデルにも適用できる。
  • 転送の具体的な方法
    • 「面倒なモデル」の生成するクラス確率を、「小さなモデル」を訓練するための「ソフトターゲット」として使用
    • 同じトレーニングセット、または別の「転送」セットを使用
    • ソフトターゲットのエントロピーが高い場合、「小さいモデル」は効率よくトレーニングが可能
  • 「面倒なモデル」の出力情報の活用
  • Caruanaらは確率ではなくロジットを用いた。
  • 本論文の「蒸留」では、ソフトマックスの温度(temperature)を使って、より適切なターゲットのソフトセットを生成する。
  • 用いるトレーニングセットについて(ここが良く理解できていない)

2 Distillation

  • 「温度付きソフトマックス関数」について
  • 最も単純な形式の蒸留
    • 蒸留モデルは転送セットで訓練される。
    • 転送セットは、温度を高くしたソフトマックス関数を用いた面倒なモデルで生成されたもの。
    • 蒸留モデルの学習時は同じ温度、学習後は1。
  • 転送セットのラベルが既知の場合、より良い改善方法は、異なる2つの目的関数の加重平均の使用
    • 第1の目的関数はソフトターゲットのクロスエントロピー
    • 第2の目的関数は正しいラベルのクロスエントロピー
    • ソフトターゲットとハードターゲットの総体的な寄与が変わらないように調整
2.1 Matching logits is a special case of distillation
  • 第1の目的関数は、蒸留モデルと面倒なモデルのロジット間の差の二乗を最小化すること
  • 温度Tは高すぎず低すぎない中間の値が有効
3 Preliminary experiments on MNIST(MNISTでの予備実験)
  • 大モデルに対する小モデルの比較をソフトターゲットマッチング追加タスク有無で行ない、蒸留の効果を確認
  • 温度とユニットの数を振った実験の実施
  • 転送セットから一部のクラスを削除した場合でも、ロバスト性を確認
4 Experiments on speech recognition(音声認識に関する実験)
  • 自動音声認識(ASR)で使用されているディープニューラルネットワーク(DNN)音響モデルを、アンサンブルすることの効果について調査
  • 本稿で提案する蒸留戦略が望ましい効果を達成することを証明
    • すなわち、同じサイズのモデルを同じトレーニングデータから直接学習するよりも、はるかにうまく機能する単一のモデルを、モデルのアンサンブルから蒸留することが可能
5 Training ensembles of specialists on very big datasets(非常に大きなデータセットに関する専門家アンサンブルのトレーニング)
  • アンサンブル用の個々のモデルのネットワーク規模、データセットサイズが非常に大きい場合、計算量大
  • 「専門家モデル」を学習することで、 アンサンブルの学習に必要な計算量を削減
5.1 The JFT dataset
  • データセットサイズが非常に大きい"JFT dataset"は、当時訓練に半年を要した。これからアンサンブルを作ろうとすれば、数年の訓練時間が必要になり、現実的ではない。

論文読解

Google翻訳した上で、自分の理解しやすいように修正しながら読んでいく。

5.2 Specialist Models

クラスの数が非常に多い場合は、面倒なモデルが、すべてのデータについてトレーニングされた1つのジェネラリストモデルと、非常に紛らわしいクラスサブセット(異なる種類のキノコのように)からの例で、非常に充実したデータについてトレーニングされた多数の「専門家」モデルと、を含むアンサンブルであることは意味があります。

このタイプのスペシャリストのsoftmaxは、専門ではないすべてのクラスを1つのゴミ箱クラスにまとめることによって、はるかに小さくすることができます。

大きなデータセット(例えばJFTデータセット)に対するアンサンブルとして、ここでは「ジェネラリストモデル」と「専門家モデル」とを含むアンサンブルを考える。

  • ジェネラリストモデルとは
    • 全てのデータについてトレーニングされたモデル。
    • アンサンブルの中にひとつ。
  • 専門家モデル
    • データ中の非常に紛らわしいクラスについて重点的にトレーニングされたモデル。
    • 重点的にトレーニングされるクラス(専門)以外を、ごみ箱クラスとしてまとめる。
      • ソフトマックスが小さくなる。
    • アンサンブルの中に、異なる複数の専門家モデルを含める。

考え方としては簡単で、紛らわしいクラスに対応するために、問題を小分けにして別途対応する推論器を生成する。ただ、大分類を行う推論器、その後、分類されたクラスの中で詳細な分類を行う推論器といった二段階処理を考えてしまうのが普通だと思うが、それをアンサンブルで一つの推論器にできる、しかもサイズは増やさずに、というのが面白い。

過剰適合を減らし、低レベルの特徴検出器を学習する作業を分担するために、各専門家モデルはジェネラリストモデルの重みで初期化されます。

これらの重みは、半分がその特別なサブセットから、半分が残りの訓練セットから無作為にサンプリングされる学習データセットで、専門家を訓練することによってわずかに修正される。

レーニング後、専門家クラスがオーバーサンプリングされた割合のログで、ゴミ箱クラスのロジットを増加させることで、偏ったトレーニングセットを補正できます。

専門家モデルは、ジェネラリストモデルの重みで初期化される。これによって学習時間を大きく短縮する。

専門家用の学習は、半分が専門家用データ、半分が専門家用以外のデータからなる学習セットによって行う。
アンサンブルを作るために複数の学習を行う際、異なるデータセットを用いるというのは当たり前なので、このあたりに本論文の重要なノウハウがありそう。ここでは学習データの構成しか書いていないが、例えば重み固定などは行わないのだろうか? また、どれくらい学習したら収束したとみなすのだろう。

最後、ロジットを補正については良くイメージができない。実際に手を動かしてみないと分からなそう。

5.3 Assigning classes to specialists(専門家にクラスを割り当てる)

専門家のためのオブジェクトカテゴリのグループ化を導き出すために、私たちは私たちの完全なネットワークがしばしば混同するカテゴリに焦点を合わせることにしました。

混同行列を計算し、そのようなクラスタを見つける方法として使用することができたとしても、我々はより単純なアプローチ、クラスタを構築するための真のラベルを必要としないアプローチ、を選びました。

まず、専門家に与えるべきオブジェクトカテゴリのグループ化を導き出す必要がある。ジェネラリストモデルが間違えやすいものを専門家に解かせるのはいいが、ではジェネラリストモデルが間違えやすいデータベースを作るところから始めなくてはならない、ということか。

で、そこにもいろいろ工夫ができそうだが、ここではなるべく単純なアプローチを選ぶ、と。

特に、我々はジェネラリストモデルの推論の共分散行列にクラスタリングアルゴリズムを適用し、一緒に推論されることが多いクラスの集合S^mが、我々の専門家モデルの1つ、mのためのターゲットとして使用されるようにする。

我々はK-meansアルゴリズムのオンライン版を共分散行列の列に適用し、合理的なクラスタを得ました(表2に示す)。

同様の結果が得られるいくつかのクラスタリングアルゴリズムを試しました。

JFT 1:ティーパーティー。イースター;ブライダルシャワー;ベビーシャワー;イースターのウサギ; ...
JFT 2:橋;斜張橋。つり橋高架橋煙突; ...
JFT 3:トヨタカローラE100。オペルSignum;オペルアストラ;マツダファミリア...
表2:我々の共分散行列クラスタリングアルゴリズムによって計算されたクラスタからのクラス例

単純なアプローチとは、ジェネラリストモデルの推論の共分散行列に、K-meansアルゴリズムなど、単純なクラスタリングアルゴリズムを適用する、というもの。

これによって、例えば車種が違うだけのクラスタなどを得ることができる。

5.4 Performing inference with ensembles of specialists(専門家アンサンブルによる推論の実行)

専門家モデルが蒸留されたときに何が起きているかを調べる前に、専門家を含むアンサンブルがどの程度うまく機能しているかを、我々は確認したいと思いました。


専門家モデルに加えて、我々は常にジェネラリストモデルを持っており、専門家を持たないクラスを扱うことができ、どの専門家を使うかを決定できるようになっています。


入力画像xが与えられると、2つのステップでトップワン分類(top-one classification)を行います。


Step 1:各テストケースについて、ジェネラリストモデルに従ってn個の最確クラスを見つけます。このクラスの集合をkと呼びます。我々の実験では、 n = 1を使用しました。


Step 2:我々は次に、混同しやすいクラスの特別なサブセットS_mを持つ、全ての専門家モデルmが、kと空でない交点を持つようにし、これを専門家のアクティブ集合A_kと呼びます(この集合は空であってもよいです)。我々はそして、次式の最小化により、すべてのクラスにわたる、完全な確率分布\bf qを発見します。


 
\begin{align}
KL({\bf p}^g,{\bf q}) + \displaystyle \sum_{m \in A_k}KL({\bf p}^m,{\bf q})
\tag{5}
\end{align}


ここで、

  • KL:KL divergence(カルバック・ライブラー情報量)
  • {\bf p}^m:専門家モデルの確率分布
  • {\bf p}^g:ジェネラリストフルモデルの確率分布

を表します。

分布{\bf p}^mは、mのすべての専門家クラスと、1つのゴミ箱クラスの分布です。そのため、フルq分布からそのKL情報量を計算するとき、我々は、フルq分布がmのごみ箱中のすべてのクラスに割り当てる確率をすべて合計します。

蒸留の前のジェネラリストモデルと専門家モデルからなるアンサンブルの性能を確認しているようです。その方法は、2つのステップからなるトップワン分類(top-one classification)によって行う、とのことですが、良く理解できませんでした。

当たり前に考えれば、入力画像をまずジェネラリストモデルを使って分類し(クラスkに分類される)、それをさらに詳細に分類できる専門家モデル(クラスkをさらに分類できるアクティブ集合A_k)を動作させ分類する、といったところでしょうか。

式5はモデルが出力する確率分布と真の確率分布とを比較する式であり、これの最小化により、真の確率分布を取得しようとしていると考えられます。

すべてのモデルが各クラスに対して単一の確率を生成する場合、KL(p,q)またはKL(q,p)のどちらを使用するかに依存して、解は算術平均または幾何平均のいずれかになります。それにもかかわらず、式5は一般閉形式解(general closed form solution)を持ちません。


我々は(T=1で)q=softmax(z)をパラメータ化し、そして勾配降下法を使用してロジットz を式5を用いて最適化します。この最適化は各画像に対して実行されなければならないことに留意してください。

式5は一般閉形式解(general closed form solution)を持たない、つまり解けないので、勾配降下法を使うと理解しました。qをパラメータ化して最小値を求め、そのときのロジットzを得ます。

5.5 Results

訓練済みのベースラインフルネットワークから始めて、専門家モデルの訓練は非常に高速です(数週間かかるJFTに対して数日)。また、すべての専門家モデルは、完全に独立して訓練されます。


表3に、ベースラインシステムと、専門家モデルと組み合わせたベースラインシステムとの、絶対テスト精度を示します。 61のスペシャリストモデルを使用では、全体としてテスト精度に4.4%の改善が見られます。


また、条件付きテストの精度についても報告します。これは、専門家クラスに属する例を考慮し、推論をそのクラスのサブセットに限定することによる精度です。

結果として、以下のようなことを述べています。

  • 専門家モデルの訓練は非常に高速
  • 独立に訓練可能
  • 絶対テスト精度 の改善、条件付きテストの精度

JFT専門家実験のために、それぞれ300のクラス(と、ゴミ箱クラス)を持つ、61の専門家モデルを訓練しました。


専門家のためのクラスのセットは互いに素ではないため、特定の画像クラスをカバーする複数の専門家が存在しました。


表4は、以下を示します。

  • テストセット例の数
  • 専門家を使用した場合に1の位置で正しい例の数の変化
  • クラスをカバーする専門家の数でブレークダウンされたJFTデータセットのためのtop1精度における、相対的なパーセンテージの改善


我々は、独立した専門家モデルの訓練は並列化が非常に容易であるため、特定のクラスをカバーする専門家が多くなれば精度がより改善するという一般的な傾向に、励まされています。

あるクラスをカバーする専門家は1つでなければならないという縛りがないとのことです。そう言った縛りがないことは、実用上、データの取り扱いはかなり楽になることでしょう。

しかも精度も上がるのかな?

まとめ

論文"Distilling the knowledge in a neural network."の5.2~5.5節を読みました。

Noise2Noiseを理解する①

論文"Noise2Noise: Learning Image Restoration without Clean Data"を読みます。

"Abstract"を読む

我々は、機械学習による信号の再構築 - 破損した観測値をクリーンな信号にマッピングする学習 -に、基本的な統計的推論を、単純で強力な結論を用いて適用します。


すなわち、明示的な画像の事前分布や破損の尤度モデルを使用せずに、破損した例を確認するだけで、クリーンなデータを使用したトレーニングのパフォーマンス以上に、画像復元を学ぶことができます。


実際には、我々は、ノイズの多いデータのみに基づいて、単一のモデルで、写真のノイズ除去、合成モンテカルロ画像のノイズ除去、アンダーサンプリングされたMRIスキャンの再構成(すべて異なるプロセスで破損)を、学習することを示します。

まずアブストラクトです。本論文が示す機械学習型画像復元モデルは、

  • 明示的な画像の事前分布や尤度モデルを使用しない
  • 破損した例を確認するだけでクリーンなデータを使用した場合以上のパフォーマンスを実現
  • 異なる様々な破損プロセスに利用可能

という強力な方法です。

"1. Introduction"を読む

「不完全データからの信号再構成」とディープラーニング

破損または不完全な測定からの信号再構成は、統計データ解析の重要なサブフィールドです。


ディープニューラルネットワークにおける最近の進歩は、

  • 伝統的かつ明示的な、「信号破損の先験的統計的モデリング(a priori statistical modeling)」を回避すること、
  • その代わりに、破損した観察を、観察されていないクリーンなバージョンにマッピングすることを学習すること、

に、大きな関心を呼び起こした。

従来より、統計データ解析の一分野に「不完全データからの信号再構成」というものがあります。

ディープラーニングの登場により、この分野に起きた革命は、「伝統的な統計的モデリング」は行わず「破損したものからは損していないものに変換する方法を学習する」というものです。

つまり、理論的に正しい方法を考えるのではなく、大量のデータを使って無理やりとりあえずうまくいく方法を見つけだす、といったところでしょうか(ディープラーニングでやっていることは全てこれな気もしますが)。

基本の式(1)

これは、回帰モデル(例えば、畳み込みニューラルネットワーク(CNN))を、破損入力\hat{x}_iとクリーンターゲットy_iとからなる多数のペア(\hat{x}_i,y_i)で訓練し、経験的リスクを最小化するものであり、次式によって行われる。



\begin{align}
\underset{\theta}{argmin} \displaystyle \sum_i L(f_\theta(\hat{x}_i),y_i),
\tag{1}
\end{align}

ここで、f_\thetaは、損失関数Lの下での、写像パラメトリックファミリ(parametric family)(例えばCNNs)です。


我々は記法\hat{x}を使って、破損入力\hat{x} \thicksim p(\hat{x}|y_i)が、クリーンなターゲットに従って分布した確率変数(random variable)であることを強調します。

求めようとしているのは、フィルタf_\thetaであり、やることはこれを入力画像\hat{x}_iと正解画像y_iのペアを用いた学習で取得するという単純なアイデアです。

重要なのは、入力画像\hat{x}_iが、正解画像y_iに従う確率変数であることのようです。

問題はトレーニングセットの取得が面倒な場合

レーニングデータは、例えば、同じシーンの短時間露光写真と長時間露光写真のペア、磁気共鳴画像の不完全および完全なk空間サンプリング、合成シーンの高速だがノイズが多いものと低速だが収束した光線追跡レンダリング、等を含むことができる。


いくつかのアプリケーションにおいて一時づしい進歩が報告されています。

  • ガウスノイズ除去
  • de-JPEG
  • テキスト除去(Maoら、2016)
  • 超解像性(Ledigら、2017)
  • カラー化(Zhangら、2016)
  • (Iizukaら、2017)


しかし、クリーンなトレーニングターゲットの取得は、しばしば困難あるいは面倒です。たとえば、

  • ノイズのない写真は長時間の露光を必要とします。
  • フルMRIサンプリングは動く被験者に適しません。

等々。

機械学習を用いる多くの研究と同様、問題となるのははデータの収集に手間がかかるとのことです。クラスタリング等のように人手を使えば何とかなるものと異なり、データの取得には何らかの装置や取得方法に工夫がいるというところが特徴的でしょうか。

取得が原理的に非常に難しいものもある一方で、簡単に取得可能なもの、特定の人には取得が簡単なものなどありそうです。たまたま簡単に収集できるデータが、機械学習に有効に使えるデータだった、ということがあり得て、そういう場合は思いもよらないビジネスに繋がったりするのかもしれませんね。

問題を解決する手段「クリーンなデータが不要」

本研究では、我々は、悪い画像を見るだけで、悪い画像を良い画像に変えることがしばしば学習でき、そして、これがクリーンな例を用いた場合と同等に―ときには同等以上に―良好に働く、ことを観察しています。


さらに、我々は、破損の明示的な統計的尤度モデルも事前画像も必要とせず、代わりに訓練データから間接的にこれらを学習します。(実際、我々の例の1つである合成モンテカルロレンダリングでは、非定常ノイズを分析的に特徴付けることはできない)。


ノイズ除去に加えて、本発明者らの観察は、アンダーサンプリングされたデータからのMRI再構成のような逆問題に直接適用可能である。


我々の結論は統計的観点からはほとんど自明ではないが、訓練データの利用可能性に関する要件を引き上げることによって、実際的な学習信号の再構築を著しく容易にする。


Noise2Noiseトレーニングのための参照TensorFlow実装はGitHub. で利用可能です。

本研究は、

  • 悪い画像だけで良い画像を生成
  • 悪い画像に与えられている統計的尤度モデルや事前画像も不要。
  • 様々な課題に適用可能

というものです。
必要なデータ収集が難しいなら要らなくても良い方法を実現するということで、本当にそんなことができるのか? と思ってしまう内容です。

まとめ

"Noise2Noise: Learning Image Restoration without Clean Data"のAbstractとIntroductionを読みました。

論文 "Fast bilateral-space stereo for synthetic defocus" ④

論文"Fast bilateral-space stereo for synthetic defocus. "を読む。

背景

低品質のセグメンテーション結果から高品質のセグメンテーション結果を生成するバイラテラルソルバーについて調査中、実際にプログラミングするため引用文献から本論文にたどり着いた。

疑問点

  • バイラテラルソルバーを計算するために必要な行列、ベクトルの作り方。
  • 親和性行列の作り方(二重確率化とは?)
  • 信頼度の作り方

論文を読む

論文はデフォーカスレンダリングを目的とするデプスマップ作成のために、バイラテラル空間で行なわれる新しい最適化フレームワークを提案し、高速に視差図を求めようとしている。

コア技術はバイラテラルフィルタをピクセル空間からバイラテラル空間へとリサンプリングする「バイラテラル表現」であり、まずは"2. FAST BILATERAL FILTERING"において、本論文が取り扱うパーミュテヘドラルラティスと単純化バイラテラルグリッドの簡単な説明と参考文献が紹介されている。

合続いて、3. PROBLEM FORMULATION を読み進めていく。

3. PROBLEM FORMULATION

以下、論文を和訳して適当に切り貼りする。そのため、重要な記述の抜け漏れがあるかもしれない。

グローバルステレオ最適化問題

本論文が解こうとしている最適化問題を次式に示す。

\begin{align}
\underset {\bf{p}}{\rm minimize} \ \displaystyle \frac{1}{2} \sum_i \sum_j \hat{A}_{i,j} (p_i-p_j)^2 + \lambda \sum_i f_i(p_i)
\tag{5}
\end{align}

  • \lambda:式の前半の平滑化項と、後半のデータとのバランスをとる乗数。
  • \hat{A}_{i,j}ピクセルijの間の類似性。行列Aのbistochastic (二重確率行列形、すべての行と列の合計が1。操作が簡単で、フィルターとして使用すると望ましい特性がある[20])。
  •  f_i \left( \cdot \right):異なる値のp_iにペナルティを課す凸コスト関数。ステレオ命名法(nomenclature)では、すべての f_i \left( \cdot \right)のセットが集合的にステレオペアの「コストボリューム」を形成する。

上式は前半が平滑化に関する制約、後半がデータに関する制約であり、それぞれ望ましい視差 p_iをとることで値が小さくなるので、式を最小化することで求める視差 p_iが得られる。


本章「PROBLEM FORMULATION」は、この式(5)から、次の式(10)を導出する方法を述べている。

\begin{align}
\underset {\bf{v}}{\rm minimize} \ {\bf v}^T (C_s-C_n\bar{B}C_n){\bf v} + \lambda \displaystyle \sum_j g_j(v_j)
\tag{10}
\end{align}

  • \bf v:バイラテラル空間における頂点
  •  C_s:対角がSの行の和に等しい対角行列(C_s = diag(S1)
  •  C_nC_n\bar{B}C_n1= C_s1となるように構築された対角行列
  •  \bar{B}:バイラテラル空間における「ぼかし」行列
  •  g_i \left( \cdot \right):バイラテラル空間におけるデータ項を与えるルックアップテーブル

このバイラテラル空間最適化問題は、式5のピクセル空間最適化問題と近似的に同等である。

この変換に用いているのが3章で述べた「バイラテラル表現」の考え方である。
式(5)をそのまま解くのは計算量的に現実的ではないので、「バイラテラル表現」を用いて近似した式(10)を作って最適な頂点\bf vを取得する問題に置き換えることで、計算量を抑え高速化する。なお、この頂点\bf vは、次式によってピクセル空間における対応ピクセル\bf pに変換できる。


\begin{align}
\textbf{p} = S^T \textbf{v}
\tag{7}
\end{align}

なお、式(5)から式(10)を導出する方法は、本章「PROBLEM FORMULATION」の他、「補足資料"Fast Bilateral-Space Stereo for Synthetic Defocus Supplemental Material"」に詳細が記述されている。
その変換の方法は置いておき、ここからは、式(10)の具体的な作り方(行列Sやルックアップテーブルgの作り方)、また高速化できたとはいえ、式(10)をどうやって解くのかについて調べていく。

まとめ

3. PROBLEM FORMULATION を読み、この論文が解こうとしている最適化問題は式(10)であることを理解する。
式の導出方法などは他文献にまたがるようなので詳細はまた別に調査したい。まずは式(10)を実際に動かせるようにすることを目標とする。

論文を読む"Distilling the knowledge in a neural network."⑫

背景

「蒸留(Distillation)」に関して、論文"Ravi Teja Mullapudi, Online Model Distillation for Efficient Video Inference."を読んだ。
その中で引用されていたモデル蒸留のために広く使用されている技術の論文として、次の論文を読み進めている。

[18] G. Hinton, O. Vinyals, and J. Dean. Distilling the knowledge in a neural network. arXiv preprint arXiv:1503.02531, 2015.

前回まで

Abstract

  • 背景

機械学習アルゴリズムは、複数の異なるモデルの推論を平均化することで性能が向上する(モデルのアンサンブル)。

  • 問題

モデルのアンサンブルは計算コストが高すぎる。

  • 従来手法

Caruanaらの"Model compression."は、アンサンブル内の知識を単一のモデルに圧縮することを示している。

  • 提案手法

従来手法をさらに異なる圧縮技術を用いることで発展させる。また、フルモデルとスペシャリストモデルとで構成するアンサンブルも提案。

  • 効果

MNISTでいくつかの驚くべき結果を達成。
商用音響モデルを大幅に改善。
スペシャリストモデルは迅速かつ並行して訓練することが可能。

1 Introduction

  • レーニングと展開、それぞれの最適化
    • 昆虫はそれぞれ全く異なる要件に最適化した幼虫形態と成虫形態を持つ
    • 同様に機械学習も、トレーニング段階と展開段階で要件は大きく異なるのだから、それぞれで最適化した形態を持てば良い。
    • レーニング用の面倒なモデルから展開用の単純なモデルへの移行戦略はRich Caruanaらの”Model compression.”で提案されており、これを「蒸留」と呼ぶ。
  • 機械学習における知識
    • 蒸留という有望なアプローチを阻害するのは、「モデルの中の知識と学習されたパラメータを区別してしまう傾向」。
    • 知識とは「学習済みマッピング」である。
    • だからこそ、不正解に対する確率もごくわずかであれ定義されてしまう。
  • モデルを一般化する正しい方法
    • 目的関数はユーザーの真の目的を反映すべきであるが、実際は反映できていない。
    • モデルを一般化する正しい方法に関する情報が必要であるが、普通は利用不可能。
    • ただし、大きなモデルを学習済みで、蒸留によって小さなモデルを作る場合、大きなモデルの学習に用いた方法が小さなモデルにも適用できる。
  • 転送の具体的な方法
    • 「面倒なモデル」の生成するクラス確率を、「小さなモデル」を訓練するための「ソフトターゲット」として使用
    • 同じトレーニングセット、または別の「転送」セットを使用
    • ソフトターゲットのエントロピーが高い場合、「小さいモデル」は効率よくトレーニングが可能
  • 「面倒なモデル」の出力情報の活用
  • Caruanaらは確率ではなくロジットを用いた。
  • 本論文の「蒸留」では、ソフトマックスの温度(temperature)を使って、より適切なターゲットのソフトセットを生成する。
  • 用いるトレーニングセットについて(ここが良く理解できていない)

2 Distillation

  • 「温度付きソフトマックス関数」について
  • 最も単純な形式の蒸留
    • 蒸留モデルは転送セットで訓練される。
    • 転送セットは、温度を高くしたソフトマックス関数を用いた面倒なモデルで生成されたもの。
    • 蒸留モデルの学習時は同じ温度、学習後は1。
  • 転送セットのラベルが既知の場合、より良い改善方法は、異なる2つの目的関数の加重平均の使用
    • 第1の目的関数はソフトターゲットのクロスエントロピー
    • 第2の目的関数は正しいラベルのクロスエントロピー
    • ソフトターゲットとハードターゲットの総体的な寄与が変わらないように調整
2.1 Matching logits is a special case of distillation
  • 第1の目的関数は、蒸留モデルと面倒なモデルのロジット間の差の二乗を最小化すること
  • 温度Tは高すぎず低すぎない中間の値が有効
3 Preliminary experiments on MNIST(MNISTでの予備実験)
  • 大モデルに対する小モデルの比較をソフトターゲットマッチング追加タスク有無で行ない、蒸留の効果を確認
  • 温度とユニットの数を振った実験の実施
  • 転送セットから一部のクラスを削除した場合でも、ロバスト性を確認
4 Experiments on speech recognition(音声認識に関する実験)
  • 自動音声認識(ASR)で使用されているディープニューラルネットワーク(DNN)音響モデルを、アンサンブルすることの効果について調査
  • 本稿で提案する蒸留戦略が望ましい効果を達成することを証明
    • すなわち、同じサイズのモデルを同じトレーニングデータから直接学習するよりも、はるかにうまく機能する単一のモデルを、モデルのアンサンブルから蒸留することが可能
5 Training ensembles of specialists on very big datasets(非常に大きなデータセットに関する専門家アンサンブルのトレーニング)
  • アンサンブル用の個々のモデルのネットワーク規模、データセットサイズが非常に大きい場合、計算量大
  • 「専門家モデル」を学習することで、 アンサンブルの学習に必要な計算量を削減

論文読解

Google翻訳した上で、自分の理解しやすいように修正しながら読んでいく。

5.1 The JFT dataset

JFTは、15,000ラベルでラベル付けされた1億のイメージを持つ、Googleの内部データセットです。


この研究を行ったとき、Google用JFTのベースラインモデルは、ディープ畳み込みニューラルネットワークであり[7]、多数のコアによる非同期確率勾配降下法を使用して、約6か月間トレーニングされていました。このトレーニングでは2種類の並列処理を使用しました[2]。


まず、ニューラルネットのレプリカが、コアの異なるセットで実行され、トレーニングセットとは異なるミニバッチを処理していました。各レプリカは、現在のミニバッチの平均勾配を計算し、この勾配を分割されたパラメータサーバに送信します。このサーバは、パラメータの新しい値を返送します。これらの新しい値は、最後にパラメータをレプリカに送信してからパラメータサーバが受信したすべての勾配を反映しています。


第二に、各レプリカは、ニューロンの異なるサブセットを各コアに配置することによって複数のコアに分散されます。


アンサンブルトレーニングは、他の2つのタイプをラップすることができる3番目のタイプの並列処理ですが、使用できるコアがもっと多い場合に限られます。


モデルのアンサンブルをトレーニングするために数年間待つことは選択肢ではなかったので、ベースラインモデルを改善するためのもっと早い方法が必要でした。


ここでは、アンサンブルに対する反論である、「個々のモデルが大規模なニューラルネットワークで、データセットが非常に大きい場合、並列化は簡単だとしても、トレーニング時に必要な計算量があまりに多くなる」データセットの例として「JFT」を紹介している。

JFTとは、

  • Googleの内部データセット
  • 15,000ラベルでラベル付けされた1億のイメージを持つ

このデータセットを用いた訓練は、研究当時のディープ畳み込みニューラルネットワーク [7]を多数のコアによる非同期確率勾配降下法を使用して、約6か月間という非常に長い期間を要しました。

これを、条件を変えて複数回行ない、アンサンブルを生成しようと思ったら、6カ月×アンサンブルの数、ということで数年の月日がかかります(その間に技術の進歩が進んで、学習完了時には陳腐化しているということが起きそうですね)。

ですので、抜本的な学習速度の改善が必要となります。

まとめ

論文"Distilling the knowledge in a neural network."の5.1節、データセット「JFT」について、です。次の5.2節は、「Specialist Models」についてです。

論文を読む"Distilling the knowledge in a neural network."⑪

背景

「蒸留(Distillation)」に関して、論文"Ravi Teja Mullapudi, Online Model Distillation for Efficient Video Inference."を読んだ。
その中で引用されていたモデル蒸留のために広く使用されている技術の論文として、次の論文を読み進めている。

[18] G. Hinton, O. Vinyals, and J. Dean. Distilling the knowledge in a neural network. arXiv preprint arXiv:1503.02531, 2015.

前回まで

Abstract

  • 背景

機械学習アルゴリズムは、複数の異なるモデルの推論を平均化することで性能が向上する(モデルのアンサンブル)。

  • 問題

モデルのアンサンブルは計算コストが高すぎる。

  • 従来手法

Caruanaらの"Model compression."は、アンサンブル内の知識を単一のモデルに圧縮することを示している。

  • 提案手法

従来手法をさらに異なる圧縮技術を用いることで発展させる。また、フルモデルとスペシャリストモデルとで構成するアンサンブルも提案。

  • 効果

MNISTでいくつかの驚くべき結果を達成。
商用音響モデルを大幅に改善。
スペシャリストモデルは迅速かつ並行して訓練することが可能。

1 Introduction

  • レーニングと展開、それぞれの最適化
    • 昆虫はそれぞれ全く異なる要件に最適化した幼虫形態と成虫形態を持つ
    • 同様に機械学習も、トレーニング段階と展開段階で要件は大きく異なるのだから、それぞれで最適化した形態を持てば良い。
    • レーニング用の面倒なモデルから展開用の単純なモデルへの移行戦略はRich Caruanaらの”Model compression.”で提案されており、これを「蒸留」と呼ぶ。
  • 機械学習における知識
    • 蒸留という有望なアプローチを阻害するのは、「モデルの中の知識と学習されたパラメータを区別してしまう傾向」。
    • 知識とは「学習済みマッピング」である。
    • だからこそ、不正解に対する確率もごくわずかであれ定義されてしまう。
  • モデルを一般化する正しい方法
    • 目的関数はユーザーの真の目的を反映すべきであるが、実際は反映できていない。
    • モデルを一般化する正しい方法に関する情報が必要であるが、普通は利用不可能。
    • ただし、大きなモデルを学習済みで、蒸留によって小さなモデルを作る場合、大きなモデルの学習に用いた方法が小さなモデルにも適用できる。
  • 転送の具体的な方法
    • 「面倒なモデル」の生成するクラス確率を、「小さなモデル」を訓練するための「ソフトターゲット」として使用
    • 同じトレーニングセット、または別の「転送」セットを使用
    • ソフトターゲットのエントロピーが高い場合、「小さいモデル」は効率よくトレーニングが可能
  • 「面倒なモデル」の出力情報の活用
  • Caruanaらは確率ではなくロジットを用いた。
  • 本論文の「蒸留」では、ソフトマックスの温度(temperature)を使って、より適切なターゲットのソフトセットを生成する。
  • 用いるトレーニングセットについて(ここが良く理解できていない)

2 Distillation

  • 「温度付きソフトマックス関数」について
  • 最も単純な形式の蒸留
    • 蒸留モデルは転送セットで訓練される。
    • 転送セットは、温度を高くしたソフトマックス関数を用いた面倒なモデルで生成されたもの。
    • 蒸留モデルの学習時は同じ温度、学習後は1。
  • 転送セットのラベルが既知の場合、より良い改善方法は、異なる2つの目的関数の加重平均の使用
    • 第1の目的関数はソフトターゲットのクロスエントロピー
    • 第2の目的関数は正しいラベルのクロスエントロピー
    • ソフトターゲットとハードターゲットの総体的な寄与が変わらないように調整
2.1 Matching logits is a special case of distillation
  • 第1の目的関数は、蒸留モデルと面倒なモデルのロジット間の差の二乗を最小化すること
  • 温度Tは高すぎず低すぎない中間の値が有効
3 Preliminary experiments on MNIST(MNISTでの予備実験)
  • 大モデルに対する小モデルの比較をソフトターゲットマッチング追加タスク有無で行ない、蒸留の効果を確認
  • 温度とユニットの数を振った実験の実施
  • 転送セットから一部のクラスを削除した場合でも、ロバスト性を確認
4 Experiments on speech recognition(音声認識に関する実験)
  • 自動音声認識(ASR)で使用されているディープニューラルネットワーク(DNN)音響モデルを、アンサンブルすることの効果について調査
  • 本稿で提案する蒸留戦略が望ましい効果を達成することを証明
    • すなわち、同じサイズのモデルを同じトレーニングデータから直接学習するよりも、はるかにうまく機能する単一のモデルを、モデルのアンサンブルから蒸留することが可能

Google翻訳した上で、自分の理解しやすいように修正しながら読んでいく。

論文読解

5 Training ensembles of specialists on very big datasets(非常に大きなデータセットに関する専門家アンサンブルのトレーニング)

モデルのアンサンブルの学習は並列計算を利用するための非常に簡単な方法であり、アンサンブルはテスト時に過度の計算を必要とするという通常の反論は、蒸留を使用することによって対処することができます。

ただし、アンサンブルにはもう1つの重要な反論があります。それは、個々のモデルが大規模なニューラルネットワークで、データセットが非常に大きい場合、並列化は簡単だとしても、トレーニング時に必要な計算量があまりに多くなることです。

モデルをパラメータの初期化やデータセットを変えながら複数訓練した時、ではどれを製品に用いるのか、と悩んだことがあります。


そのとき、アンサンブルの精度を求めることすらしていなかったのですが、やってみたら精度向上ができることがわかっていたのかもしれません。しかし、精度向上できてもやっぱり規模が大きくなりすぎてどう実装しようかとまた悩んでいたかもしれません。


今後、同じような実装をするときは、この論文のような蒸留を試すことになりそうです。ただ、放っとけばいいとはいえ、PCを占有して数週間学習させて結果を取得するのは面倒ですが。


ということで、本章の「計算量があまりに多い場合にどうするか」は非常に興味があるところです。

In this section we give an example of such a dataset and we show how learning specialist models that each focus on a different confusable subset of the classes can reduce the total amount of computation required to learn an ensemble. The main problem with specialists that focus on making fine-grained distinctions is that they overfit very easily and we describe how this overfitting may be prevented by using soft targets.

この章では、そのようなデータセットの例を示し、それぞれが異なる混同しやすいクラスのサブセットに焦点を当てる「専門家モデル」を学習する方法によって、アンサンブルの学習に必要な計算量を削減できることを示します。
きめ細かい区別をすることに焦点を当てている専門家の主な問題は、彼らが非常に簡単にオーバーフィットするということであり、我々はこのオーバーフィットが、ソフトターゲットを使用することによってどのように防止されるかについて説明します。

この章の概要は、

  • 問題
    • アンサンブル用の個々のモデルのネットワーク規模、データセットサイズが非常に大きい場合、計算量大
  • 解決手段
    • 「専門家モデル」を学習
  • 課題
    • オーバーフィットしやすい専門家を、ソフトターゲットの使用することでオーバーフィット防止
  • 効果
    • アンサンブルの学習に必要な計算量を削減

まとめ

論文"Distilling the knowledge in a neural network."の5章を読み始めました。この先、5.1から5.5節まであるのでそれなりに先は長いです。

論文を読む"Distilling the knowledge in a neural network."⑩

背景

「蒸留(Distillation)」に関して、論文"Ravi Teja Mullapudi, Online Model Distillation for Efficient Video Inference."を読んだ。
その中で引用されていたモデル蒸留のために広く使用されている技術の論文として、次の論文を読み進めている。

[18] G. Hinton, O. Vinyals, and J. Dean. Distilling the knowledge in a neural network. arXiv preprint arXiv:1503.02531, 2015.

前回まで

Abstract

  • 背景

機械学習アルゴリズムは、複数の異なるモデルの推論を平均化することで性能が向上する(モデルのアンサンブル)。

  • 問題

モデルのアンサンブルは計算コストが高すぎる。

  • 従来手法

Caruanaらの"Model compression."は、アンサンブル内の知識を単一のモデルに圧縮することを示している。

  • 提案手法

従来手法をさらに異なる圧縮技術を用いることで発展させる。また、フルモデルとスペシャリストモデルとで構成するアンサンブルも提案。

  • 効果

MNISTでいくつかの驚くべき結果を達成。
商用音響モデルを大幅に改善。
スペシャリストモデルは迅速かつ並行して訓練することが可能。

1 Introduction

  • レーニングと展開、それぞれの最適化
    • 昆虫はそれぞれ全く異なる要件に最適化した幼虫形態と成虫形態を持つ
    • 同様に機械学習も、トレーニング段階と展開段階で要件は大きく異なるのだから、それぞれで最適化した形態を持てば良い。
    • レーニング用の面倒なモデルから展開用の単純なモデルへの移行戦略はRich Caruanaらの”Model compression.”で提案されており、これを「蒸留」と呼ぶ。
  • 機械学習における知識
    • 蒸留という有望なアプローチを阻害するのは、「モデルの中の知識と学習されたパラメータを区別してしまう傾向」。
    • 知識とは「学習済みマッピング」である。
    • だからこそ、不正解に対する確率もごくわずかであれ定義されてしまう。
  • モデルを一般化する正しい方法
    • 目的関数はユーザーの真の目的を反映すべきであるが、実際は反映できていない。
    • モデルを一般化する正しい方法に関する情報が必要であるが、普通は利用不可能。
    • ただし、大きなモデルを学習済みで、蒸留によって小さなモデルを作る場合、大きなモデルの学習に用いた方法が小さなモデルにも適用できる。
  • 転送の具体的な方法
    • 「面倒なモデル」の生成するクラス確率を、「小さなモデル」を訓練するための「ソフトターゲット」として使用
    • 同じトレーニングセット、または別の「転送」セットを使用
    • ソフトターゲットのエントロピーが高い場合、「小さいモデル」は効率よくトレーニングが可能
  • 「面倒なモデル」の出力情報の活用
  • Caruanaらは確率ではなくロジットを用いた。
  • 本論文の「蒸留」では、ソフトマックスの温度(temperature)を使って、より適切なターゲットのソフトセットを生成する。
  • 用いるトレーニングセットについて(ここが良く理解できていない)

2 Distillation

  • 「温度付きソフトマックス関数」について
  • 最も単純な形式の蒸留
    • 蒸留モデルは転送セットで訓練される。
    • 転送セットは、温度を高くしたソフトマックス関数を用いた面倒なモデルで生成されたもの。
    • 蒸留モデルの学習時は同じ温度、学習後は1。
  • 転送セットのラベルが既知の場合、より良い改善方法は、異なる2つの目的関数の加重平均の使用
    • 第1の目的関数はソフトターゲットのクロスエントロピー
    • 第2の目的関数は正しいラベルのクロスエントロピー
    • ソフトターゲットとハードターゲットの総体的な寄与が変わらないように調整
2.1 Matching logits is a special case of distillation
  • 第1の目的関数は、蒸留モデルと面倒なモデルのロジット間の差の二乗を最小化すること
  • 温度Tは高すぎず低すぎない中間の値が有効
3 Preliminary experiments on MNIST(MNISTでの予備実験)
  • 大モデルに対する小モデルの比較をソフトターゲットマッチング追加タスク有無で行ない、蒸留の効果を確認
  • 温度とユニットの数を振った実験の実施
  • 転送セットから一部のクラスを削除した場合でも、ロバスト性を確認

論文読解

Google翻訳した上で、自分の理解しやすいように修正しながら読んでいく。

4 Experiments on speech recognition(音声認識に関する実験)

このセクションでは、自動音声認識(ASR)で使用されているディープニューラルネットワーク(DNN)音響モデルを、アンサンブルすることの効果について調べます。
我々は、本稿で提案する蒸留戦略が次のような望ましい効果を達成することを示します。すなわち、同じサイズのモデルを同じトレーニングデータから直接学習するよりも、はるかにうまく機能する単一のモデルを、モデルのアンサンブルから蒸留することがでます。

この段落は本章の概要説明しています。「自動音声認識(ASR)用DNN音響モデルのアンサンブルに対しても、提案する蒸留戦略を導入することで、良い結果が得られた」と。


特に同じ実験をしようというのでない限り、この先を詳細に読む必要は無さそうです。(詳細に読んでも同じ実験をするのは難しそうですし)
まあ、一応読んだので続けますが。

最先端のASRシステムは現在、DNNを使用して、波形から導出された特徴の(短い)時間的コンテキストを隠れマルコフモデル(HMM)の離散状態にわたる確率分布にマッピングします[4]。より具体的には、DNNはその都度トライフォン状態のクラスタにわたる確率分布を生成し、次いでデコーダはHMM状態を通る経路を見つけます。それは高確率状態を使用することと、言語モデルの下でありそうな転写を生成することとの間の最良の妥協です。

最先端のASRシステム"State-of-the-art ASR systems"に関して説明しています。

デコーダ(ひいては言語モデル)が全ての可能な経路にわたってマージナル化することによって考慮されるようにDNNを訓練することは可能である(そして望ましい)が、一般には、フレームごとの分類を行うようにDNNを訓練する。
ネットによって行われた予測と、各観測についてグランドトゥルース状態列との強制アライメントによって与えられたラベルとの間のクロスエントロピーを(局所的に)最小化することによって。つまり次式である:


\begin{align}
\theta = \arg \underset{\theta ’}{\max} P(h_t|s_t;\theta’)
\tag{-}
\end{align}

ここで、 \thetaは、我々の音響モデルPのパラメータであり、時間 t s_tでの音響観測値を「正しい」HMM状態 h_tの確率 P(h_t|s_t;\theta’)マッピングします。これは、正しい単語のシーケンスを用いた、強制アラインメントによって決定されます。このモデルは、分散型確率勾配降下法で訓練されています。

訓練の仕方と評価関数について述べています。

我々は、それぞれ2560の正規化線形ユニット(ReLU)を含む8つの隠れ層と、14,000ラベル(HMM targets h_t)の最終的なソフトマックス層と、を持つアーキテクチャを使用します。
入力は、フレームあたり10ミリ秒進む40メルスケールのフィルタバンク係数の26フレームであり、我々は21番目のフレームのHMM状態を予測します。
パラメータの総数は約85Mです。
これは、Androidの音声検索で使用される音響モデルのやや古いバージョンであり、非常に強力なベースラインと見なすべきです。
DNN音響モデルを訓練するために、約2000時間の話された英語のデータを使用します、そしてそれは約700Mの訓練例をもたらします。
このシステムは、私たちの開発セットで58.9%のフレーム精度と10.9%のWord Error Rate(WER)を達成しています。

アーキテクチャ、入力、パラメータの総数、訓練データ、そしてその性能について述べています。

ここまでで説明したDNNを用いる最先端のASRシステムをベースラインとして用いています。この性能(58.9%のフレーム精度と10.9%のWord Error Rate(WER))に対し、提案手法でどう改善されるのかが本章のポイントです。

4.1 Results

我々は、ベースラインと全く同じアーキテクチャおよびトレーニング手順を使用して、P(h_t|s_t;\theta)を推論するために10個の別々のモデルをトレーニングした。
モデルは異なる初期パラメータ値で無作為に初期化され、これが訓練されたモデルに十分な多様性を生み出し、アンサンブルの平均推論が個々のモデルよりも著しく優れた性能を発揮することを可能にする。
我々は、各モデルが用いるデータセットを変えることで、モデルに多様性を追加することを検討しましたが、結果が大きく変わらないことがわかったので、より単純なアプローチを選びました。
蒸留では[1、2、5、10]の温度を試し、ハードターゲットのクロスエントロピーには相対重み0.5を使用しました。ここで太字は表1に使用された最良の値を示します。

まずアンサンブルの作り方を説明しています。

  • ベースラインと全く同じアーキテクチャおよびトレーニング手順を使用
  • 異なる初期パラメータを用いた10個の別々のモデルをトレーニン
    • 各モデルが用いるデータセットの変更は試したが結果は大きく変わらず

ベースラインからアンサンブルを作ることで、サイズが10倍になりますが、性能が向上したモデルを作成します。これを蒸留することで性能を維持しつつサイズをベースラインと同等にすることを目指します。

表1は、実際に、私たちの蒸留アプローチは、ハードラベルを使用して単一のモデルをトレーニングするよりも、トレーニングセットからより有用な情報を抽出できることを示しています。
10モデルのアンサンブルを使用することによって達成されたフレーム分類精度の改善の80%以上が蒸留モデルに転送されます。これはMNISTでの予備実験で観察された改善と同様です。
目的関数の不一致のために、アンサンブルはWERの最終目的に対して(23Kワードのテストセットでは)より小さな改善を示しますが、アンサンブルによって達成されたWERの改善は蒸留モデルに転送されます。

このブログには表1は載せていませんが、表1には蒸留の結果、アンサンブルよりも性能はわずかに低下していますが、ベースラインより性能が向上したモデルが示されています。

我々は最近、すでに訓練されたより大きなモデルのクラス確率を一致させることによって、小さな音響モデルを学習することに関する関連研究に気付いた[8]。
ただし、彼等はラベリングされていないデータセットを使用して1の温度で蒸留を実行しており、最良の蒸留モデルは、小さいモデルのエラー率は、ハードラベルで同じ訓練を行った大きいモデルと小さいモデルのエラー率の間の差が、28%減少するだけです。

他の関連研究との比較です。提案手法の方がうまくいっている、と。

まとめ

論文"Distilling the knowledge in a neural network."の4章を読みました。

3次元空間における平面について

平面の式

import math
import numpy as np
# 3次元空間における平面と直線の交点
# 3次元空間における平面を、Ax+By+Cz+D=0とする。
# 3次元空間における直線を、x/a=y/b=z/cとする。

# 平面の中心
X = 100*math.sqrt(3)
Y = 100
Z = 100
# 原点からの距離
L = math.sqrt(pow(X,2) + pow(Y,2) + pow(Z,2))
# 平面の法線
A = X/L
B = Y/L
C = Z/L
#
D=-(X*A + Y*B + Z*C)
print('[A,B,C,D]=', [A,B,C,D])

平面に大きさを設定

# 平面上をx軸、y軸方向に1移動したときの、空間上の移動距離
# x,y が与えられたときのz:z = -(x*A + y*B + D)/C 
# x=X+1, y=Y のときのz
z_x = -((X+1)*A + Y*B + D)/C

# 単位ベクトル
v_x = np.array([1,0,z_x-Z])/math.sqrt(1 + pow((z_x-Z),2))
# x=X, y=Y+1 のときのz
z_y = -(X*A + (Y+1)*B + D)/C
v_y = np.array([0,1,z_y-Z])/math.sqrt(1 + pow((z_y-Z),2))

print(v_x)
print(v_y)

# 平面の範囲を指定
H=20
W=20

print(v_x*(-W))
print(v_x*(W))
print(v_y*(-H))
print(v_y*(H))

直線と交点

# 直線の向きを表すベクトル
a=0.5
b=0.5
c=5

# 平面と交点は、
x = -D/(A+B*b/a+C*c/a)
y = x*b/a
z = x*c/a

print(x,y,z)