プログラミング

プログラミング

PR

データを用いてニューラルネットワークを訓練する方法

MEREHEAD

DIGITAL WEB DEVELOPMENT AGENCY. We achieve higher results through cutting-edge technologies, dazzling design, and teamwork.

本記事は、How to Train a Neural Network with Data
翻訳・再構成したものです。
配信元または著者の許可を得て配信しています。

772 views

読了時間 : 約7分25秒

人工知能とニューラルネットワークの紹介

過ちから学び、過去の経験を学ぶことによって新しいシナリオを決定することは、人間の知性の特徴です。 科学者たちは長い間この知能を機械にも実装しようとしてきました。 機械を知的にして自己学習させるこの研究は、人工知能または計算知能と呼ばれます。

 

人工知能は1950年代から存在していましたが、最近ようやく有名になりました。 この主な理由は、ディープラーニング、つまりディープニューラルネットワークの復活です。 ニューラルネットワークは50年以上前から使われてきましたが、計算コストのためにその使用はあまり一般的ではありませんでした。

 

しかしながら、コンピュータハードウェアがニューラルネットワークを改良するようになってから、現実的なものとなってきたのです。

 

誰もが音声認識や画像分類のようなさまざまなタスクに、ニューラルネットワークを使うことに興味を持ち始めました。 2012年には、ようやく大規模な視覚認識チャレンジ(LSVRC)に注目が集まりました。 2010年には、スタンフォードのFei-Fei Liのグループによって、数百万のラベル付き画像を含むImagenetとして知られる大きなデータベースが作成され公開もされました。

 

このデータベースは年間LSVRCと結合され、このコンペティションでは、コンテストは彼ら自身のモデルを構築し、それらをテストデータに基づいて予測させ、そしてそれらの正確性についてランク付けされます。

 

そのため、新しい非線形性導入関数、GPUを使用した高速コンピューティング、新しい種類のオプティマイザ、ニューラルネットワークの改良されたアーキテクチャなど、他のあらゆる発見と共に、データも、ニューラルネットワークの活性化に重要な役割を果たしました。 ユースケースとして、販売およびマーケティングにおけるAIを含むすべての分野を網羅しています。

 

ニューラルネットワークの基本用語と学習

これらのニューラルネットワークとは何か、そしてどのようにしてそれらを人間の知能を模倣するように学習させるのか説明してきました。 さて、一般的な意味でのニューラルネットワークはニューロンで構成されています。 ニューロンは、いくつかの入力を受け取り、各入力に対してすべての入力に対してある重みと同じバイアス値を割り当て(これらはトレーニング中に学習する変数です)、非線形性を適用する数学関数(Rectified Linear Unit (ReLU))で、ほとんどの場合、出力を生成します。

 

典型的なニューラルネットワークでは、これらのニューロンは垂直に積み重ねられて層を形成し、次にこれらの層は水平に積み重ねられて多層ニューラルネットワークを形成します。 ニューラルネットワークの最初の層は通常入力層であり、最後の層は出力層と呼ばれ、中間の層は隠れ層と呼ばれます。 ニューラルネットワークはICOで広く使用されており、一部のカウンターパートでさえ、暗号通貨交換ソフトウェアでそれらを使用することを提案しています。

 

最初の層のニューロンの数は入力変数(特徴)の数に等しく、中間の層のニューロンの数は(最適化のために決める)ハイパーパラメータで、最後の層のニューロンの数は次の数に等しくなります。 ネットワークから必要な出力が必要です。 また、損失関数を使用して実際の値とネットワークの出力との偏差を計算します。これは、ニューラルネットワークの重みを学習するのに役立ちます。

 

上述のニューラルネットワークの基本的な用語に慣れたら、 ニューラルネットワークのトレーニングプロセスを視覚化することは難しくありません。 前の段落で述べた規則に従って各層のニューロンの数を保つニューラルネットワークを構築することから始めます。 ニューラルネットワークの隠れ層の数も、隠れ層のニューロンの数と同じようにハイパーパラメータです。これについては後で説明します。

 

一度、私たちはニューラルネットワークを構築しました。 私たちの次のステップは、重みとバイアスを初期化することです。この初期化をランダムに保ち、すべてのニューロンが何か別のことを学ぶようにします。 しかし、バイアスの場合にはこのランダム性は必要ではなく、ゼロで初期化することができます。 これらの重みとバイアスは、学習のために学習するため、学習可能パラメータとも呼ばれます。

 

さて、これらのパラメータを学ぶためには、まず実際の値と比較してそこから学習を始めることができるように、何らかの出力を生成する必要があります。 ネットワークの出力を計算するには、最初にニューロンに来る各入力に各入力に割り当てられた重みを掛け、積を合計し、その合計にバイアス項を加え、非線形性を適用することによって計算できる各ニューロンの出力が必要です。

 

この関数は、f(x 1、x 2、…、x n)= RELU(w 1 * x 1 + w 2 * x 2 + … + w n * x n + b)のような式で表すことができます。 RELUが非線形関数、Wsが重み、Xsが入力、bがバイアス項です。 この結果を計算した後、その結果を次の層の各ニューロンに渡します。

 

このプロセス全体はフォワードパスとして知られています。 これを使ってニューラルネットワークへの与えられた入力に対する結果を予測します。 結果を予測するときは順方向パスで十分ですが、トレーニングの目的で、予測と実際のデータの間の偏差を計算するためにさらに進んで損失関数を考案または使用する必要があります。 対処している問題の性質に応じて、損失関数にはさまざまな選択肢があります。

 

実際の学習は損失の計算の直後に始まります。私たちの目標はこの損失を最小限に抑えることであり、これに使用するアプローチはバックプロパゲーションと呼ばれています。 バックプロパゲーションで行うことは、各ウェイトと各バイアスに関して損失の偏導関数を取得し、損失を減らすために導関数の反対方向に重みとバイアスを更新することです。

 

重みを更新するには、通常次の公式を使います。Wnew = Wold – alpha *(Woldに対する損失の偏導関数)。 学習率として知られているアルファを除いて、他のすべての変数は自明です。 この学習率は基本的に重みを更新するために取ることになるステップの大きさを定義します。このアルファを大きくしないことにより、ブレを続けず、最良の結果を与えるWsの値を見逃しません。

 

これは、アルファを常に非常に小さくする必要があるという意味ではありません。アルファを非常に小さくすると、ステップが非常に小さくなって大幅な改善がもたらされるため、学習が遅くなる可能性があるためです。

 

ニューラルネットワークを訓練するための高度な実践

これまでのところ、プロセスはニューラルネットワークを訓練するために必要最低限のものです。 しかし、良い結果を得るためにニューラルネットワークを訓練するには、さらにいくつかの手順が必要です。 そのうえ、これらのステップに従い、ある決断をするためには、主題についての正しい知識を持っている必要があります。

 

これらの決定には、学習曲線の動きを見て学習率の値を増減すること、ネットワークのアーキテクチャを決定すること、およびトレーニング中にネットワークが過装備または過小装備であるかどうかを判断することが含まれます。 ニューラルネットワークとAIは、実際にはブロックチェーン業界の新しい分野であり、分散システムで表現することができます。

 

検証とテストのためのデータセットの分割

まず最初に、データセットをトレーニングセット、検証セット、およびテストセットの3つに分割することをお勧めします。 これらの分割は、私たちのモデルの学習を追跡するのに役立ちます。良いモデルは、3つの分割すべてでうまく機能するものです。

 

トレーニングセットは期待される出力を提供することによってモデルを学習させるために使用され、検証スプリットはトレーニングセットと比較してこのスプリット上でモデルの学習を監視するために使用され、これはハイパーパラメータを微調整するのに役立ちます。テストスプリットは、 目に見えないデータに対するモデルのパフォーマンスを確認するためのモデルの精度またはその他の基準となります。

 

アンダーフィットとオーバーフィット

トレーニングを開始したら、各反復の後にトレーニング損失と検証損失のグラフをプロットすると便利です。 これらの曲線を見て、モデルがアンダーフィット、オーバーフィット、またはデータに適しているかどうかを判断できます。 2〜3回の反復後にトレーニング損失が減少していない、または増加していて偏微分のような他のすべての計算が正しい場合、それはトレーニングデータには適合していません。

 

つまり、ネットワークはこの関係をマッピングするのに十分なほど複雑ではなく、おそらくさらに多くのニューロンとレイヤーを含める必要があります。 ニューラルネットワークが苦しむことができる別の問題はこれをあてはめることであり、検証損失がトレーニング損失よりも高い場合です。 このケースでは通常、ニューラルネットワークが過度に複雑になりすぎてトレーニングデータに固有となってしまい、全体のデータが一般化されない場合に発生します。 このモデルは現実の環境ではうまく機能しません。

 

オーバーフィットの解決

オーバーフィットの問題を取り除くには多くの方法があります。正則化、ドロップアウト、ネットワークの複雑さの軽減、およびデータの増強が含まれますが、これらに限定されません。 正則化は、大きさが大きいことに対して重みを不利にするプロセスであり、重み関数の大きさに正比例する項を損失関数に加えることによって実行されます。

 

ニューラルネットワークを訓練するとき、私たちはより高い値の重みに対してより高い損失を得る一方、これらの重みに対する値は不利になり、そしてより高い損失を避けるために、モデルによって大きさが小さく保たれます。 ドロップアウトは、ネットワーク内の特定のニューロンへの依存を回避するために、ニューラルネットワークのトレーニング中に使用される手法です。 これは、ランダムな確率値を選択することによって行われ、ランダムなニューロンの数は各反復のトレーニング中に除外されます。

 

ネットワークの各反復の間、異なるニューロンが除外されます。 ネットワークの複雑さを軽減するということは、ネットワーク内のニューロンや層を削除することによってネットワークの重みを軽減することを意味します。 データ増強とは、私たちの手持ちのデータを増やすことで、トレーニングデータがネットワークに収まりきらないほど小さくならないようにすることです。

 

データ増強は、データの種類に応じて様々な方法で実行することができ、例えば、画像の場合、いくつかの画像をぼかすこと、いくつかの画像を弾くこと、およびいくつかの他の操作を実行することによって実行できます。 適切に行われれば、データ増強はネットワークのパフォーマンスを向上させる上で非常に良い一歩となりえます。

 

重みの初期化

ニューラルネットワークの訓練中の別の重要なステップは、重みの適切な初期化を確実にすることです。 重みをゼロで初期化することは非常によくない考えです。ニューラルネットは対称性の破れを実行しません

 

すべての重みをゼロに設定すると、すべての層のすべてのニューロンが同じ計算を実行し、同じことを学ぶため、ニューラルネットワークはデータの全体的な側面を一般化できず、ネットワークのパフォーマンスの向上に役立ちません。 ランダム初期化は対称性を破るのに役立ちますが、各ニューロンは訓練とは異なる別のことを学習してしまいます。 重みの値をコンパクトに保ち、高い標準偏差なしに保つために、これらの重みの値をゼロに近い値に保つことも重要です。

 

前の層のサイズを念頭に置いて重みを初期化する別のアプローチは、損失関数の大域的最小値をより速くより効率的に達成するのに役立ちます。 重みはまだランダムですが、前のニューロン層のサイズによって範囲が異なり、収束が速くなります

 

まとめ

 

これらのステップは氷山の一角にすぎません。これらのニューラルネットワークを訓練する際には、さらに多くの事実が考慮されなければなりません。 より現代的な方法としては、畳み込みニューラルネットワーク、リカレントニューラルネットワークおよびカプセルネットワークを含む従来の人工ニューラルネットワーク以外のニューラルネットワークを用いたバッチ正規化、ネットワークの集合訓練、および異なる種類のオプティマイザの使用などがあります。

 

トレーニングでは、損失プロットを見たり、実行する反復回数を決定したり、反復の間に学習ラタを調整したりするなど、ハイパーパラメータを慎重に微調整する必要もあります。

 

ニューラルネットワークは非常に強力な学習モデルであり、最近では、物体検出、言語翻訳、音声認識、癌検出、自律運転などの分野で広く使用されています。 ニューラルネットワークを使用するための別のアプローチは、ディープラーニングのように大量のデータを持たず、研究者の間で実際の人気が高まっている強化学習です。

おすすめ新着記事

おすすめタグ