ポピュラーサイエンス | TensorFlow.js から機械学習について学ぶ

ポピュラーサイエンス | TensorFlow.js から機械学習について学ぶ

フロントエンド開発者にとって、機械学習を理解するのは難しい場合があります。私は機械学習を勉強し始めてまだ間もなく、この分野では初心者です。この記事では、私自身の理解に基づいていくつかの概念を説明してみたいと思います。

ただし、既存の AI モデルを使用する場合、機械学習に関する深い知識は必要ありません。 Keras、TensorFlow、TensorFlow.js などの既存のツールを使用できます。ここでは、AI モデルを作成し、TensorFlow.js でいくつかの複雑なモデルを使用する方法について説明します。

深い知識は必要ありませんが、基本的な概念をいくつか説明させてください。

モデルとは何ですか?

あるいは、もっと良い質問は、「現実とは何か?」です。はい、これには答えるのが難しいので、理解するために質問を単純化する必要があります。

現実を簡略化して表現する 1 つの方法は、モデルを使用することです。つまり、世界地図やチャートなど、無限の数のモデルとして考えることができます。

[[243131]]

機械が関与しないモデルは私たちにとって理解しやすいです。たとえば、バルセロナの住宅の部屋数が変わると価格がどう変化するかを表すモデルを作成するとします。

まず、いくつかのデータを収集する必要があります。

部屋数価格
3 131.000ユーロ
3 125.000ユーロ
4 235,000ユーロ
4 265,000ユーロ
5 535.000ユーロ

次に、各軸が 1 つのパラメータに対応する 2D グラフを使用して、これら 2 つのデータを表示します。

そして...ドゥアン!これで、線を引いて、6部屋以上の家の価格を予測できるようになりました。

このモデルは線形回帰と呼ばれ、機械学習における最も単純なモデルの 1 つです。

もちろん、このモデルは十分ではありません。

  • サンプルが5つしかないため、結果は十分に信頼できるものではない
  • パラメーターは 2 つだけですが、実際には地理的な場所や家の築年数など、住宅価格に影響を与える要因は他にもたくさんあります。

最初の問題については、100 万のデータを追加するなど、サンプル数を増やすことで解決できます。

2 番目の質問では、軸をさらに追加できます。 2D グラフィックスでは直線を描くことができ、3D 座標では平面を描くことができます。

しかし、4D や 1000000D など、3D を超える状況にはどのように対処すればよいのでしょうか?

私たちの脳は多次元のグラフを視覚化することはできませんが、幸いなことに、数学を使用して超平面を計算することでこれを処理することができ、ニューラル ネットワークはそのための優れたツールです。

ちなみに、TensorFlow.js を使用するのに数学の専門家である必要はありません。

ニューラルネットワークとは何ですか?

ニューラル ネットワークを理解する前に、まずニューラル ネットワークとは何かを理解しましょう。

現実世界では、ニューロンは次のようになります。

神経の最も重要な部分は次のとおりです。

  • デンドライト: データが入る場所。
  • 軸索: 出力端。
  • シナプス: 神経が伝達する構造。神経軸索の末端から近くの神経の樹状突起に電気信号を伝達する役割を担っています。これらのシナプス構造は、使用されると電気信号の活動を増加または減少させるため、学習の鍵となります。

機械学習におけるニューラル ネットワークは (簡略化して) 次のようになります。

  • 入力: 入力パラメータ。
  • 重み: シナプスと同様に、重みはニューロンの活動を増減して調整し、より優れた線形回帰を実現します。
  • 線形関数: 各ニューロンは線形回帰関数のようなものです。これまでのところ、線形回帰関数には 1 つのニューロンのみが必要です。
  • 活性化関数: スカラーから別の非線形関数に変更するための活性化関数をいくつか提供できます。例: シグモイド、RELU、tanh。
  • 出力: 活性化関数が計算された後の出力結果。

活性化関数の使用は非常に便利であり、ニューラル ネットワークの本質です。活性化関数がなければ、ニューラル ネットワークは十分な知能を発揮できません。その理由は、ネットワーク内に多数のニューロンがあっても、ニューラル ネットワークの出力は常に線形回帰となるためです。非線形問題を解決するには、この独立した線形回帰を非線形回帰に変換する何らかのメカニズムが必要です。

これらの活性化関数のおかげで、これらの線形関数を非線形関数に変換できます。

モデルのトレーニング

上記の 2D 線形回帰の例では、グラフ上に線を描くだけで、新しいデータの予測を開始できました。しかし、「ディープラーニング」の概念は、ニューラルネットワークにこの線を描くことを教えることです。

単純な線を描くには、ニューロンが 1 つある非常に単純なニューラル ネットワークだけが必要ですが、他のモデルでは、2 セットのデータを分類するなど、はるかに複雑な処理を実行します。この場合、「トレーニング」では次の画像の描き方を学習します。

これは 2D のみなので、それほど複雑ではありません。

各モデルは世界であり、これらすべてのモデルのトレーニングの概念は似ています。まずランダムな線を描き、それを反復アルゴリズムで改善し、各サイクルでエラーを修正します。この最適化アルゴリズムは、勾配降下法とも呼ばれます。同様の概念を持つ、SGD や ADAM などのより複雑なアルゴリズムもあります。

勾配降下法を理解するには、各アルゴリズム (線形回帰、ロジスティック回帰など) がこれらのエラーを測定するための異なるコスト関数を持っていることを知っておく必要があります。

コスト関数は常にある点に収束し、凸または非凸になることがあります。最終的な収束点は 0% の誤差で見つかり、この点に到達することが私たちの目標です。

しかし、勾配降下アルゴリズムを使用する場合、ランダムなポイントから開始しますが、それがどこにあるかはわかりません。自分が山の上にいて、完全に目が見えず、一歩一歩山を下りて頂上まで行かなければならないと想像してください。地形が複雑な場合(非凸関数など)、降下プロセスはより複雑になります。

勾配降下法アルゴリズムが何であるかについては詳しく説明しません。覚えておかなければならないのは、これは AI モデルをトレーニングして予測のエラーを最小限に抑えるために使用される最適化アルゴリズムであるということです。このアルゴリズムでは、行列乗算を計算するために時間と GPU が必要です。通常、最初の実行ラウンドで収束点に到達するのは難しいため、学習率などのハイパーパラメータを調整したり、正規化を追加したりする必要があります。

勾配降下法を繰り返した後、収束点に非常に近い点に到達し、エラー率は 0% に近くなりました。この時点で、モデルは正常に作成され、予測を開始できます。

TensorFlow.jsを使用してモデルをトレーニングする

TensorFlow.js は、ニューラル ネットワークを簡単に作成する方法を提供します。

まず、LinearModel クラスを作成し、trainModel メソッドを追加します。

このタイプのモデルでは、モデル トポロジが分岐やスキップのない単純なスタックである場合など、1 つのレイヤーの出力が次のレイヤーの入力となるシーケンシャル モデルを使用します。

trainModel メソッド内でレイヤーを定義します (線形回帰問題には 1 つだけ使用すれば十分です)。

  1. *をtfとしてインポート  '@tensorflow/tfjs' ;   
  2.  
  3. /**  
  4. * 線形モデルクラス 
  5. */  
  6. デフォルトクラスLinearModelをエクスポートします{  
  7. /**  
  8. * 列車模型 
  9. */  
  10. 非同期trainModel(xs, ys){  
  11. 定数レイヤー = tf.layers.dense({  
  12. 単位: 1, //出力次元 空間   
  13. inputShape: [1], //パラメータは1つだけ 
  14. });  
  15. const lossAndOptimizer = {  
  16. 損失: 'meanSquaredError'  
  17. オプティマイザー: 'sgd' , // 確率的勾配降下法 
  18. };
  19.  
  20. this.linearModel = tf.sequential();  
  21. this.linearModel.add (layers); //レイヤー追加する 
  22. this.linearModel.compile(損失とオプティマイザ);   
  23.  
  24. // モデルのトレーニングを開始します。  
  25. this.linearModel.fit() を待機します。  
  26. tf.tensor1d(xs)、  
  27. tf.tensor1d(ys)、  
  28. );  
  29. }   
  30.  
  31. ...もっと 
  32. }

このクラスの使用方法:

  1. 定数モデル = 新しい LinearModel();  
  2. // xsys ->数値配列(x 軸y 軸)  
  3. model.trainModel(xs, ys) を待機します。

トレーニング後、予測を開始できます。

TensorFlow.js を使用した予測

予測の部分は通常簡単です。モデルのトレーニングにはいくつかのハイパーパラメータを定義する必要がありますが、予測を行うのは簡単です。このメソッドを LinearRegressor クラスに追加します。

  1. *をtfとしてインポート  '@tensorflow/tfjs' ;  
  2. デフォルトクラスLinearModelをエクスポートします{  
  3. ...トレーニングコード 
  4. 予測(値){  
  5. Array.fromを返します(  
  6. this.linearModel  
  7. .predict(tf.tensor2d([値], [1, 1]))  
  8. .dataSync()  
  9.  
  10. }  
  11. }

さて、コードで予測メソッドを使ってみましょう

  1. const prediction = model.predict(500); //数値 500予測する 
  2. console.log(予測) // => 420.423

このコードはオンラインで実行できます:

https://stackblitz.com/edit/linearmodel-tensorflowjs-react

TensorFlow.jsでトレーニング済みモデルを使用する

モデルの作成方法、トレーニング データの正規化、すべてのハイパーパラメータの正しい選択などを学習することが最も難しい部分です。初心者で、いくつかのモデルを試してみたい場合は、事前トレーニング済みのモデルを使用できます。

TensorFlow.js で使用できるモデルは多数あり、TensorFlow または Keras を使用してモデルを作成し、それを TensorFlow.js にインポートすることができます。

たとえば、posenet モデル (リアルタイムの人間のポーズ シミュレーション) を使用して、次のような楽しいことができます。

コードは https://github.com/aralroca/posenet-d3 から入手できます。

使い方はとても簡単です:

  1. *posenetとしてインポート  '@tensorflow-models/posenet' ;  
  2. // 定数 
  3. 定数imageScaleFactor = 0.5;  
  4. 定数出力ストライド = 16;  
  5. 定数 flipHorizo​​ntal = true ;  
  6. 定数重み = 0.5;   
  7.  
  8. //モデルをロードする 
  9. const net = posenet.load (weight) を待機します。   
  10.  
  11. // 予測を行う 
  12. const poses = await ネット 
  13. .estimateSinglePose(  
  14. 画像要素、  
  15. 画像スケール係数、  
  16. 水平反転、  
  17. 出力ストライド 
  18. );

poses 変数は次の JSON ファイルにあります。

  1. {  
  2. 「スコア」 : 0.32371445304906、  
  3. 「キーポイント」 : [  
  4. {  
  5. "位置" : {  
  6. "y" : 76.291801452637,  
  7. "x" : 253.36747741699  
  8. },  
  9. 「部分」 「鼻」  
  10. 「スコア」 : 0.99539834260941  
  11. },  
  12. {  
  13. "位置" : {  
  14. "y" : 71.10383605957,  
  15. "x" : 253.54365539551  
  16. },  
  17. 「部分」 : 「左目」  
  18. 「スコア」 : 0.98781454563141  
  19. },  
  20. // ...そして 対象: rightEye、leftEar、rightEar、leftShoulder、rightShoulder  
  21. // 左肘、右肘、左手首、右手首、左ヒップ、右ヒップ、  
  22. // 左膝、右膝、左足首、右足首 
  23. ]  
  24. }

このモデルだけで、どれだけ面白いことができるか想像してみてください。

[[243138]]

上記のサンプルコードは次の場所にあります: https://github.com/aralroca/fishFollow-posenet-tfjs

Kerasからのモデルのインポート

TensorFlow.js には外部からモデルをインポートできます。次の例では、数字認識に Keras モデルを使用します (ファイル形式は h5)。これを実現するには、tfjs_converter を使用する必要があります。

  1. pip で tensorflowjs をインストールします

次に、変換ツールを使用します。

  1. tensorflowjs_converter --input_format keras keras/cnn.h5 src/assets  

これで、モデルを JS コードにインポートできます。

  1. //モデルをロード 
  2. const model = tf.loadModel( './assets/model.json' ) を待機します。   
  3.  
  4. //イメージを準備する 
  5. img = tf.fromPixels(imageData, 1); とします。  
  6. 画像のサイズを縮小します。  
  7. img = tf.cast (img、 'float32' );   
  8.  
  9. // 予測する 
  10. const出力= model.predict(img);

わずか数行のコードで、Keras の数字認識モデルを使用できます。もちろん、キャンバスを追加して数字を描画し、その画像をキャプチャして数字を認識するなど、さらに興味深いロジックを追加することもできます。

コード: https://github.com/aralroca/MNIST_React_TensorFlowJS

なぜブラウザで AI を実行するのでしょうか?

ハードウェアが良好でない場合、ブラウザ上でモデルをトレーニングすることは非常に非効率的になる可能性があります。 TensorFlow.js は WebGL インターフェースを使用してトレーニングを高速化しますが、それでも TensorFlow Python バージョンよりも 1.5​​ ~ 2 倍遅くなります。

しかし、TensorFlow.js が登場する前は、API のやり取りなしにブラウザで機械学習モデルを使用することは基本的に不可能でした。これで、アプリケーションでモデルをオフラインでトレーニングして使用できるようになりました。また、サーバーとやり取りする必要がないため、予測が速くなります。

もう 1 つの利点は、これらの計算をブラウザで実行すると、サーバーのオーバーヘッドが削減され、コストが節約されることです。

結論は

  • モデルとは、予測を行うために使用できる現実の一部を簡略化した表現です。
  • モデルを作成する良い方法は、ニューラル ネットワークを使用することです。
  • ニューラル ネットワークを作成するシンプルで簡単な方法は TensorFlow.js です。

<<:  電子商取引用に作成されたナレッジグラフは、ユーザーのニーズをどのように感知するのでしょうか?

>>:  AI スタートアップの品質を測定するにはどうすればよいでしょうか?

ブログ    
ブログ    

推薦する

...

...

自動運転車の未来はどうなるのか?マッキンゼーは言う

自動運転車は徐々に現実のものとなりつつありますが、まだ多くの疑問が残っています。消費者は本当に運転の...

...

TCP輻輳制御アルゴリズムについての簡単な説明

最近、TCP/IP プロトコルの学習に時間を費やしました。主な理由は、TCP/IP に関する私の理解...

マイクロソフト、中小企業向けにCopilot AIアシスタントを導入、個人向けにプレミアムサービスを開始

マイクロソフトは火曜日、中小企業が同社の生産性向上アプリ内で仮想アシスタント「Copilot」を利用...

多くの場所で顔認証の削除が通知されました!人工知能業界は衰退するのでしょうか?

[[356436]] 「ブラックテクノロジー」の顔スキャンマシンを大量に購入する人がいる一方で、顔...

ネットで熱い議論:感染拡大から半年でディープラーニングの求人数が激減

[[340795]]ビッグデータダイジェスト制作近年、ディープラーニング エンジニアは市場で最も人気...

2021 年に知っておくべきすべての機械学習アルゴリズム

機械学習に関する知識が増えるにつれて、機械学習アルゴリズムの数も増えました。この記事では、データ サ...

2021 年のビジネス インテリジェンスの 7 つのトレンド

[[418205]]ビジネス インテリジェンスの応用は、近年、人工知能、機械学習、自然言語処理 (N...

テキストの説明に基づいてビデオから画像を切り取る、Transformer:このクロスモーダルタスクは私が最も得意とすることです

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

3 つの質問、7 人の CXO、「自動運転」に関するブレインストーミング

[[442506]]この記事はLeiphone.comから転載したものです。転載する場合は、Leip...

...

AIは中国のインターネットを狂ったように汚染している

AIは中国のインターネットを汚染する「犯人」の1つとなった。問題はこれです。最近、誰もが AI に相...