tensorflow.jsとは Tensorflow.js は、ブラウザーと Node.js で実行できる機械学習および機械学習トレーニングの JavaScript ライブラリです。ご存知のとおり、ブラウザーで JavaScript を使用して計算を実行すると非常に時間がかかります。Tensorflow.js は GPU を使用して WebGL に基づく高性能機械学習モジュールの計算を高速化し、フロントエンド開発者がブラウザーで機械学習を実行し、ニューラル ネットワークをトレーニングできるようにします。この記事で説明するプロジェクト コードは、いくつかのルールに従ってデータをシミュレートし、機械学習とトレーニングを通じて、このデータに基づいてこのデータを生成する数式関数を逆推論するというものです。 基本概念 次に、5 分かけて TensorFlow の基本概念について説明します。この部分では主にいくつかの概念を紹介します。著者は、誰もがすぐに理解できるようにするために、いくつかの概念を簡単に説明するためにいくつかの例え話を使用します。ただし、エネルギーとスペースが限られているため、読者は概念の具体的かつ詳細な定義については公式ドキュメントを参照する必要があります。 テンソル テンソルは実際には配列であり、1 次元または多次元になります。テンソルは、tensorflow.js のデータ ユニットです。
ブラウザは次のように出力します: Tensorflow は、セマンティック テンソル作成関数も提供します: tf.scalar (0 次元テンソルを作成)、tf.tensor1d (1 次元テンソルを作成)、tf.tensor2d (2 次元テンソルを作成)、tf.tensor3d (3 次元テンソルを作成)、tf.tensor4d (4 次元テンソルを作成)、および tf.ones (テンソル内のすべての値が 1) または tf.zeros (テンソル内のすべての値が 0)。 変数 テンソル tensor は不変ですが、変数 variable は可変です。変数はテンソルから初期化されます。コードは次のとおりです。
操作 テンソルは、add (加算)、sub (減算)、mul (乗算)、square (平方)、mean (平均) などの演算子で操作できます。
上記の例の出力は次のようになります。 メモリ管理 (dispose と tf.tidy) dispose と tf.tidy はどちらも GPU キャッシュをクリアするために使用されます。これは、js コードを記述するときにこの変数に null を割り当ててキャッシュをクリアすることと同じです。
処分する テンソルと変数は両方とも、破棄することで GPU キャッシュからクリアできます。
テンソルや変数が複数ある場合、一つずつ dispose を呼び出すのは面倒なので、tf.tidy では、テンソルや変数の操作を tf.tidy 関数内に置くことで、自動的に最適化され、キャッシュがクリアされます。
上記の例の出力は次のようになります。 データのシミュレーション まず、データセットをシミュレートする必要があります。この 3 次方程式に従って、パラメーター a=-0.8、b=-0.2、c=0.9、d=0.5 を使用して、区間 [-1, 1] に誤ったデータを生成します。データは次のように視覚化されます。 4 つのパラメータ a、b、c、d の値がわからないと仮定すると、この大量のデータ、機械学習、機械学習を使用して、多項式関数方程式とその 4 つのパラメータ値 a、b、c、d を逆に推測する必要があります。 変数を設定する 多項式方程式の a、b、c、d の 4 つのパラメータ値を逆に導き出したいので、まずこれら 4 つの変数を定義し、それらに初期値としていくつかの乱数を割り当てる必要があります。
上記の 4 行のコードでは、tf.scalar が 0 次元テンソルを作成し、tf.variable がテンソルを変数に変換して初期化します。JavaScript を記述して簡単に理解すると、上記の 4 行のコードは次のようになります。
4 つのパラメータ a、b、c、d に初期ランダム値、a=0.513、b=0.261、c=0.259、d=0.504 を割り当てると、これらのパラメータを式に代入して次の曲線が得られます。 ランダムに生成された 4 つのパラメータ a、b、c、d を多項式に組み込むことで生成されたデータは、実際のデータによってシミュレートされた曲線とは大きく異なることがわかります。これが次に行うことです。機械学習とトレーニングを通じて、4 つのパラメータ a、b、c、d を継続的に調整し、この曲線を実際のデータ曲線にできるだけ近づけます。 オプティマイザーを作成する
learningRate 変数は学習率を定義します。各マシンのトレーニング中、計算されたオフセット調整振幅は学習率に基づきます。学習率が低いほど、予測値はより正確になりますが、プログラムの実行時間と計算の複雑さが増加します。学習率が高いと学習プロセスが高速化されますが、オフセットが大きすぎるため、値が正しい値の周りで変動しやすくなり、計算結果が不正確になります。 tf.train.sgd は、確率的勾配降下法である tensorflow.js にカプセル化された SGD オプティマイザーです。機械学習アルゴリズムを使用する場合、通常は勾配降下法を使用してアルゴリズムをトレーニングします。勾配降下法には、BGD、SGD、MBGD という 3 つの一般的な形式があります。 勾配が下降してトレーニング パラメータを更新するたびに、サンプル数が増えるにつれてマシン トレーニングの速度が非常に遅くなるため、バッチ勾配降下法 SGD を使用します。この問題を解決するために確率的勾配降下法が提案されました。一般線形回帰関数の関数が次の通りであると仮定します。 SGD は各サンプルの損失関数を使用して θ の偏微分と対応する勾配を取得し、θ を更新します。 確率的勾配降下法は、各サンプルを 1 回反復して更新します。1 回の反復ですべてのトレーニング サンプルを必要とする前述のバッチ勾配降下法と比較すると、SGD はより多くの回数反復し、ソリューション空間での検索プロセスは盲目的に見えます。しかし、全体的には価値が高まる方向に進んでいます。確率的勾配降下法の収束グラフは次のようになります。 期待関数モデル(トレーニングプロセス関数) 期待される機能モデルを記述するには、実際には一連の操作を使用して機能モデルを記述します。
a.mul(x.pow(tf.scalar(3, 'int32'))) は ax^3 (a の x の 3 乗) を表し、b.mul(x.square())) は bx ^ 2 (b の x の 2 乗) を表し、c.mul(x) についても同様です。予測関数が返されるときに、メモリ管理を容易にし、マシントレーニング プロセスのメモリを最適化するために、tf.tidy でラップされることに注意してください。 損失関数を定義する 次に、MSE (平均二乗誤差) を使用して損失関数を定義する必要があります。数理統計学では、平均二乗誤差は、パラメータの推定値とパラメータの真の値との差の二乗の期待値を指し、MSE で表されます。 MSE は「平均誤差」を測定するのに便利な方法です。MSE はデータの変化の度合いを評価できます。MSE 値が小さいほど、実験データを説明する予測モデルの精度が高くなります。 MSE の計算は非常に簡単です。まず、実際の y 値と、指定された x に基づいて予測された y 値との差の二乗を取得し、次にこれらの差の二乗を平均します。 上記によると、損失関数コードは次のようになります。
期待値の予測から実際の値のラベルを減算し、それを二乗して平均を求めます。 機械トレーニング さて、ここまで説明して準備を整えてきましたが、ようやく最も重要なステップに到達しました。次のコードと関数は、機械学習とトレーニングを通じてデータに基づいて目的の結果を計算するための最も重要なステップです。 SGD 確率的勾配降下法に基づいてオプティマイザーを定義し、MSE 平均二乗誤差に基づいて損失関数も定義しました。マシン トレーニングと機械学習を実行するには、これら 2 つのデバイスをどのように組み合わせればよいでしょうか。以下のコードを参照してください。
外側の層で numIterations = 75 を定義しました。これは、75 回のマシン トレーニングを実行することを意味します。各ループでは、optimizer.minimize 関数を呼び出します。この関数は、SGD 確率的勾配降下法を継続的に呼び出して、4 つのパラメーター a、b、c、d を継続的に更新および修正し、戻るたびに、MSE 平均二乗誤差損失関数を呼び出して損失を減らします。 75 ラウンドのマシントレーニングと機械学習、さらに SGD 確率的勾配降下法オプティマイザーと損失関数のキャリブレーションを組み合わせると、正しい値に非常に近い 4 つのパラメーター a、b、c、d が得られます。 この関数の最後に tf.nextFrame() という行があることに気付きました。この関数は、機械学習や機械学習中に大量の機械計算が実行され、ブラウザがブロックされ、UI が更新されなくなるという問題を解決するために設計されています。 このマシントレーニング関数を train と呼びます。
トレーニング関数を呼び出すと、4 つのパラメーター a、b、c、d を取得できます。
得られた値は、a=-0.564、b=-0.207、c=0.824、d=0.590 であり、当初定義した実際の値 a=-0.8、b=-0.2、c=0.9、d=0.5 に非常に近いです。比較チャートは次のとおりです。 プロジェクトの運営と設置 この記事で説明するコードをインストールして実行する手順は次のとおりです。
tensorflow.js の公式サンプルには多くのプロジェクトがありますが、その中で polynomial-regression-core はこの記事で重点的に取り上げるコードです。インストール プロセスは私にとってはあまりスムーズではありませんでした。実行するたびに、モジュールが不足しているというエラーが表示されました。読者は、エラー メッセージに従って不足しているモジュールを 1 つずつインストールし、エラー メッセージに従って Google で対応するソリューションを検索するだけで、すべて機能します。 結論 ここまで言ってしまったので結論は書きたくなかったのですが、考えてみるとやはり心の中のおかしくて馬鹿げた考えを表現したいと思いました。なぜ私がこの人工知能の例に興味を持っているのか?それは、私の故郷である広西チワン族自治区(人里離れた山間の村)の人々がかなり封建的で迷信深いからです。彼らはよく人の生年月日を計算してその人の人生の運命を占ったりします。私はいつもこうした風潮をあざ笑ってきました。でも、でも、でも。 。 。 。ここからがおかしな話です。私の義父は10年前、交通事故で足を骨折しました。数年前、私は妻と義父を連れて故郷に帰り、親戚に会わせました。義父は南部の封建的な迷信がとても面白いと思ったので、田舎の老人に自分の生年月日と時間を計算してもらいました。その結果、老人はいろいろと話をして、義父が交通事故に遭った日の正確な日付、その日の午後のおおよその時間まで正確に教えてくれました。 。 。 。 。これ。 。 。 。これは楽しいですね。 。 。突然空気が静かになった光景は、今でも私の心に鮮明に残っています。私はいつもこのことを心に留めています。結局のところ、私はこれらの不気味なものを信じたことはなく、科学こそが私たちを飛躍させることができる最高の真実であると常に信じてきました。 はぁ?これは人工知能とどのような関係があるのでしょうか?ちょうど考えていたのですが、私たちそれぞれの誕生日は、直交平面座標系の次元なのでしょうか、それとも誕生日は多項式関数の a、b、c、d、e の係数なのでしょうか。これらの誕生日の係数を直列に接続して、あなたの人生を記述し、あなたの過去を記録し、あなたの未来を予測できる式を取得できる多項式関数方程式は本当に存在するのでしょうか。 。 。 。 。 。私たちは、自分と対応する次元を見つけて、それを起こったことと結び付け、人工知能を使って機械学習し、私たち自身の人生の軌跡に属する機能を訓練することができるでしょうか? 。 。 。これ以上は言いません。ここまで読んでくださった読者の皆様には申し訳ないです。ただ一生懸命勉強して、私が言ったことは忘れてください。 上記の見解はあくまでも個人的な意見です。 !^_^! |
<<: なぜ記憶はAIの発展を妨げる問題となるのでしょうか?
>>: プログラマーを怒らせると何が起こるでしょうか?アリババDAMOアカデミーの専門家は嫌がらせ電話に耐えられず、「Erha」AIを開発した
Leifeng.com によると、「部屋の中の象」という外国の慣用句は、「ワニの涙」と同じくらい有...
Google の人工知能といえば、チェスマシンの AlphaGo や Waymo の自動運転車を思...
[[329919]]近年、人工知能は急速に発展しており、コンピュータービジョンや自然言語処理の分野で...
自動運転車は徐々に現実のものとなりつつありますが、まだ多くの疑問が残っています。消費者は本当に運転の...
「私は今、Miqu が Perplexity Labs の Mistral-Medium と同じモデ...
網易科技は6月27日、ここ数カ月、インターネットの方向性が変化したことを示すさまざまな兆候があると報...
1週間前、OpenAIはユーザーに特典を配布しました。GPT-4が怠惰になる問題を修正した後、より...
人工知能と機械学習は、組織がビッグデータからより優れたビジネス洞察を得るのにどのように役立つのでしょ...
ディープラーニングはおそらく、過去 2 年間でコンピューター コミュニティで最もホットな言葉です。エ...
現代の農業はミツバチに依存しています。私たちが食べる食物や呼吸する空気を含む生態系のほぼ全体が、花粉...
人間は一般的に何かが間違っていることを認識するのが得意ですが、AI システムはそうではありません。新...
ニンジン畑問題を解決するための C# アルゴリズムは何ですか?まずトピックを見てみましょう:仕事へ向...