転移学習: データが不十分な場合に深く学習する方法

転移学習: データが不十分な場合に深く学習する方法

[[191502]]

ディープラーニング技術を使用して問題を解決する際に最もよく見られる障害は、モデルのトレーニングに必要な膨大な量のデータです。これほど大量のデータが必要な理由は、学習プロセス中にマシンがモデル内の多数のパラメータに遭遇するためです。ある分野の特定の問題に直面した場合、モデルを構築するために必要な規模のデータを入手できないことがよくあります。ただし、モデルトレーニングタスクで特定の種類のデータに対して取得された関係は、同じ分野のさまざまな問題にも簡単に適用できます。これを転移学習と呼びます。

人工知能を実現するのはロケットを作るのと同じくらい難しいと思います。強力なエンジンと大量の燃料が必要です。ロケットのエンジンが強力でも燃料が不足すると、確実に離陸できなくなります。エンジンが弱ければ、燃料がいくらあっても離陸できません。ロケットを建造するには、強力なエンジンと大量の燃料が必要です。このアナロジーをディープラーニングに適用すると、ディープラーニング エンジンはロケット エンジン、アルゴリズムに提供する膨大な量のデータは燃料と考えることができます。 — アンドリュー・ン

ディープラーニング技術は最近非常に人気が高まっており、言語翻訳、戦略ゲームのプレイ、自動運転車など、何百万ものデータセットが関係する分野で目覚ましい成果を上げています。ディープラーニング技術を使用して問題を解決する際に最もよく見られる障害は、モデルのトレーニングに必要な膨大な量のデータです。これほど大量のデータが必要な理由は、学習プロセス中にマシンがモデル内の多数のパラメータに遭遇するためです。

たとえば、これらのモデルのパラメータ数値の一般的な範囲は次のとおりです。

ディープラーニング

ニューラル ネットワーク (別名ディープラーニング) は、レゴ ブロックのように積み重ねることができる階層構造です。

ディープラーニング技術は、実は大規模なニューラルネットワークです。このネットワークは、一方の端からデータが入ってきて、相互参照・理解した後にもう一方の端から出力されるフローチャートのようなものだと考えることができます。ニューラル ネットワークを複数の部分に分割し、任意の部分から必要な推論結果を取得することもできます。意味のある結果は得られないかもしれませんが、それでも実行できます。たとえば、Google DeepDream はこれを実行します。

サイズ(モデル)∝ サイズ(データ)∝ 複雑さ(問題)

モデルのサイズと必要なデータのサイズの間には、興味深いほぼ線形関係があります。基本的な推論は、特定の問題 (カテゴリの数など) に対して、モデルはデータ間の関係 (画像のテクスチャと形状、テキストの文法、音声の音素など) を捉えるのに十分な大きさでなければならないということです。モデルの初期レイヤーは、入力のさまざまなコンポーネント (エッジやパターンなど) 間の高レベルの関係を識別し、後続のレイヤーは、最終的な決定を下すために必要な情報を識別します。これにより、多くの場合、さまざまな結果を区別するのに役立ちます。したがって、問題の複雑度が高い場合(画像分類など)、必要なパラメータの数とデータの量は非常に大きくなります。

AlexNetが各段階で「見る」もの

転移学習はここにあります!

ある分野の特定の問題に直面した場合、モデルを構築するために必要な規模のデータを入手できないことがよくあります。ただし、モデルトレーニングタスクで 1 種類のデータに対して取得された関係は、同じドメイン内のさまざまな問題にも簡単に適用できます。この手法は転移学習とも呼ばれます。

Qiang Yang および Sinno Jialin Pan、「転移学習に関する調査」、IEEE Transactions on Knowledge & Data Engineering、vol. 22、no.、pp. 1345–1359、2010 年 10 月、doi:10.1109/TKDE.2009.191

転移学習は、誰も隠しておきたい最高機密のようなものです。業界内では誰もが知っていたものの、外部の人たちは全く知りませんでした。

Google検索における機械学習、ディープラーニング、転移学習の3つのキーワードの検索傾向の変化

Awesome が公開したディープラーニング分野で最も重要な論文「Most Cited Deep Learning Papers」の統計によると、論文の 50% 以上が何らかの形の転移学習または事前トレーニングを使用していました。転移学習技術は、限られたリソース(データと計算能力)を持つ人々にとってますます重要になっていますが、その概念はまだそれに見合った社会的影響を与えていません。この技術を最も必要としている人々は、それが存在することすら知りません。

ディープラーニングが聖杯であり、データが門番であるならば、転移学習はその扉を開く鍵です。

転移学習テクノロジーの助けを借りて、大規模で簡単に入手できるデータセットでトレーニングされた事前トレーニング済みモデルを直接使用できます (完全に異なるタスク用にトレーニングされていますが、入力はまったく同じですが、出力は異なります)。次に、出力結果を再利用できるレイヤーを見つけます。これらのレイヤーの出力を入力として使用し、より少ないパラメータでより小さなネットワークをトレーニングできます。この小さなネットワークは、特定の問題の内部関係を理解するだけでよく、事前トレーニング済みのモデルを通じてデータに含まれるパターンをすでに学習しています。このようにして、猫を検出するように訓練されたモデルを再利用して、ゴッホの絵画を再現することができます。

転移学習テクノロジーのもう一つの大きな利点は、モデルの「一般化」を向上できることです。大規模なモデルはデータに過剰適合する傾向があり、つまり、モデリングに使用されるデータの量が基礎となる現象の数をはるかに超えているため、目に見えないデータではテストほどうまく機能しない可能性があります。転移学習により、モデルはさまざまな種類のデータを確認できるようになるため、より優れた基礎ルールを学習できるようになります。

過剰適合は、学習プロセスにおける暗記に似ています。 — ジェームズ・ファグモス

転移学習はデータ量を削減できる

スカートが青と黒なのか、白と金なのかという論争を終わらせたい場合、まず青と黒、白と金であることが証明されているスカートの写真を大量に収集する必要があります。自分で正確なモデルを構築し、上記のような方法(1億4000万個のパラメータを含む!)を使用してトレーニングする場合、少なくとも120万枚の画像を用意する必要がありますが、これは基本的に不可能です。このとき、転移学習を試すことができます。

転移学習を使用する場合、トレーニングに必要なパラメータの数は次のように計算されます。

パラメータ数 = [サイズ(入力) + 1] * [サイズ(出力) + 1] = [2048+1]*[1+1] ~ 4098 パラメータ

必要なパラメータの数は 1.4*10⁸ から 4*10⊃3; に削減され、5 桁の削減になります。 100枚未満の写真を集めるだけです。ほっと一息!

読み続ける忍耐力がなく、すぐにスカートの色を知りたい場合は、この記事の最後までジャンプして、そのようなモデルを自分で構築する方法を確認してください。

転移学習のステップバイステップガイド - 例を使った感情分析

この例では、映画レビューが 72 件あります。

62の記事には明確な感情が含まれておらず、モデルの事前トレーニングに使用されます。

8つの記事には明確な感情が含まれており、モデルのトレーニングに使用されます。

2つの記事には明確な感情が含まれており、モデルのテストに使用されます。

ラベル付けされた文(明示的な感情を含む文)は 8 つしかないため、最初にコンテキスト予測のモデルを事前トレーニングできます。これらの 8 つの文のみを使用してモデルをトレーニングすると、精度は 50% に達します (この精度はコインを投げるのとほぼ同じです)。

この問題を解決するために転移学習を使用します。まず 62 個の文を使用してモデルをトレーニングし、次に元のモデルの一部を使用して、それに基づいて感情分類器をトレーニングします。次の 8 つの文でトレーニングした後、最後の 2 つの文でテストすると、100% の精度が得られました。

ステップ1

単語間の関係をモデル化するためのネットワークをトレーニングします。文中に含まれる単語を入力し、その単語が同じ文のどこに現れるかを予測します。次のコードでは、埋め込み行列のサイズは vocabulary xembedding_size で、各単語を表すベクトルが格納されます (ここではサイズは「4」)。

graph = tf.Graph() で graph.as_default() を使用: train_inputs = tf.placeholder(tf.int32, shape=[batch_size]) train_labels = tf.placeholder(tf.int32, shape=[batch_size, 1]) valid_dataset = tf.constant(valid_examples, dtype=tf.int32) で tf.device('/cpu:0'): embeddings = tf.Variable(tf.random_uniform([vocabulary_size,embedding_size], -1.0, 1.0)) embed = tf.nn.embedding_lookup(embeddings, train_inputs) nce_weights = tf.Variable(tf.truncated_normal([vocabulary_size,embedding_size], stddev=1.0 / math.sqrt(embedding_size)))埋め込み、1、keep_dims=True)) normalized_embeddings = 埋め込み / ノルム valid_embeddings = tf.nn.embedding_lookup(normalized_embeddings、valid_dataset) 類似性 = tf.matmul(valid_embeddings、normalized_embeddings、transpose_b=True) init = tf.global_variables_initializer()

pretraining_model.pyはGitHubでホストされており、ソースファイルを見ることができます。

ステップ2

同じコンテキストに現れる単語が同様のベクトル表現を得るように、このグラフのトレーニングを続けます。これらの文を前処理して、ストップワードをすべて削除し、トークン化します。次に、一度に 1 つの単語を渡し、その単語のベクトルと周囲の単語との間の距離を最小化し、その単語のベクトルとコンテキストに含まれていないランダムな単語との間の距離を最大化しようとします。

tf.Session(graph=graph) をセッションとして使用: init.run() av​​erage_loss = 0 for step in range(10001): batch_inputs, batch_labels = generate_batch(batch_size, num_skips, skip_window) feed_dict = {train_inputs: batch_inputs, train_labels: batch_labels} _, loss_val, normalized_embeddings_np = session.run([optimizer, loss, normalized_embeddings], feed_dict=feed_dict) average_loss += loss_val final_embeddings = normalized_embeddings.eval()

training_the_pretrained_model.pyはGitHubでホストされており、ソースファイルを見ることができます。

ステップ3

次に、文章の感情を予測してみます。現在、肯定ラベルと否定ラベルが付いた文が 10 個 (トレーニング用に 8 個、テスト用に 2 個) あります。前のステップで得られたモデルにはすでにすべての単語から学習されたベクトルが含まれており、これらのベクトルの数値属性は単語のコンテキストを表すことができるため、感情の予測をさらに簡素化できます。

このとき、文を直接使用するのではなく、文ベクトルをその文に含まれるすべての単語の平均値に設定します (このタスクは、実際には LSTM に似た技術によって実現されます)。文ベクトルは入力としてネットワークに渡され、出力はコンテンツが肯定的であるか否定的であるかのスコアになります。隠れた中間層を使用し、ラベル付きの文でモデルをトレーニングしました。ご覧のとおり、毎回 10 個のサンプルのみが使用されたにもかかわらず、モデルは 100% の精度を達成しました。

input = tf.placeholder(<span class="hljs-string"><span class="hljs-string">"float"</span></span>, shape=[<span class="hljs-keyword">なし</span>, x_size])
y = tf.placeholder(<span class="hljs-string"><span class="hljs-string">"float"</span></span>, shape=[<span class="hljs-keyword">なし</span>, y_size])
w_1 = tf.Variable(tf.random_normal((x_size, h_size), stddev=0.1))
w_2 = tf.Variable(tf.random_normal((h_size, y_size), stddev=0.1))
h = tf.nn.sigmoid(tf.matmul(X, w_1))yhat = tf.matmul(h, w_2)predict = tf.argmax(yhat, dimension=1)cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(yhat, y))updates = tf.train.GradientDescentOptimizer(0.01).minimize(cost)sess = tf.InteractiveSession()init = tf.initialize_all_variables()sess.run(init)for epoch <span class = "hljs-keyword"> <span class = "hljs-keyword"> in </span> </span> js-keyword "> <span class =" hljs-keyword "> in </span> </span> range(len(train_x)):<span class =" hljs-keyword = "hljs-keyword"> ):<span class = "hljs-string"> x:</span> train_x [<span class = "hljs-string"> i:</span> i + <span class = "hljs-number"> 1 </span> </span>] x:</span> train_x [<span class = "hljs-string"> i:</span> i + <span class = "hljs-number"> <span class = "hljs-number"> 1 </span> </span>] train_accuracy = numpy.mean(numpy.argmax(train_y, axis=<span class="hljs-number"><span class="hljs-number">1</span></span>) == sess.run(predict, feed_dict={<span class="hljs-string">X:</span> train_X, <span class="hljs-string">y:</span> train_y})) test_accuracy = numpy.mean(numpy.argmax(test_y, axis=<span class="hljs-number"><span class="hljs-number">1</span></span>) == sess.run(predict, feed_dict={<span class="hljs-string">X:</span> test_X, y: test_y})) print("エポック = %d、トレーニング精度=%.2f%%、テスト精度=%.2f%%" % (エポック+1,100.*train_accuracy、100.*test_accuracy))

training_the_sentiment_model.pyはGitHubでホストされています。ソースファイルを参照してください。

これは単なる一例ですが、転移学習技術の助けにより、精度が 50% から 100% に急速に向上したことがわかります。完全な例とコードを表示するには、次のアドレスにアクセスしてください。

https://gist.github.com/prats226/9fffe8ba08e378e3d027610921c51a78

転移学習の実際の例

#### 画像認識:

画像強調

[[191503]]

スタイル転送

物体検出

皮膚がんの検出

[[191504]]

#### テキスト認識:

ゼロショット翻訳

感情の分類

転移学習の実装の難しさ

モデルは少量のデータでトレーニングできますが、このテクノロジーを使用するには高度なスキルが必要です。上記の例でハードコードされたパラメータの数を見て、モデルをトレーニングする前にこれらのパラメータを常に調整する必要がある場合、転移学習技術を使用することがいかに難しいか想像してみてください。

転移学習技術が現在直面している問題は次のとおりです。

事前トレーニングに必要な大規模なデータセットを見つける

事前トレーニングに使用するモデルの決定

どちらかのモデルが期待どおりに動作しない場合は、デバッグが困難になります。

モデルをトレーニングするのにどれだけの追加データが必要か不明

事前学習済みモデルを使用する際にどこで停止するかを決めるのが難しい

事前トレーニング済みモデルに基づいて、モデルに必要なレイヤー数とパラメータを決定する

統合モデルをホストして提供する

より多くのデータやより優れたテクノロジーが利用可能になったら、事前トレーニング済みのモデルを更新します。

データサイエンティストを見つけるのは困難です。データ サイエンティストを発見できる人を見つけることも同様に困難です。 — クリストフ・ザヴァツキ

NanoNetsは転移学習を容易にする

私たちは、こうした問題を身をもって体験した後、転移学習技術に対応したクラウドベースのディープラーニングサービスを構築し、この使いやすいサービスを通じてこれらの問題を解決しようと試みました。このサービスには、何百万ものパラメータにトレーニングされた事前トレーニング済みモデルのコレクションが含まれています。独自のデータをアップロードする(またはインターネットでデータを検索する)だけで、サービスが特定のタスクに最適なモデルを選択し、既存の事前トレーニング済みモデルに基づいて新しい NanoNet を構築し、データを NanoNet に入力して処理します。

Nanonet は、プログラマーが学習して効果を確認するために無料で使用できます。

NanoNets の転移学習技術 (このアーキテクチャは基本的なプレゼンテーションのみです)

NanoNet の構築 (画像分類)

1. ここで処理したいカテゴリを選択します。

2. ワンクリックで Web の検索とモデルの構築を開始します (独自の画像をアップロードすることもできます)。

3. 青と金のドレスをめぐる論争を解決します(モデルの準備ができたら、使いやすい Web インターフェースを通じてテスト画像をアップロードできるようにし、特定の言語に依存しない API も提供します)。

最初の NanoNet の構築を開始するには、www.nanonets.ai にアクセスしてください。

原著者: Sarthak Jain、「原文を読む」をクリックすると英語のリンクが表示されます。

<<:  神経スタイル転送研究の概要: 現在の研究から将来の方向性まで

>>:  世の中に人工知能は存在しないのか?私たちはディープラーニングに騙されているのでしょうか?

ブログ    
ブログ    

推薦する

実践に最適なオープンソース機械学習プロジェクト 30 件をすぐに集めましょう。

「この記事は素晴らしいです! 実用的なプロジェクトがたくさん含まれており、機械学習を学び始めたばか...

アメリカン・エキスプレスはAIを活用して不正行為を検出し、セキュリティを強化

アメリカン・エキスプレスは長年にわたり、人工知能と認知技術のリーダーとして活躍してきました。大規模で...

自然言語処理のためのディープラーニングの概要: 基本概念から最先端の研究まで

自然言語処理入門導入自然言語処理 (NLP) は、言語を処理および理解することで特定のタスクを実行で...

宜春市はファーウェイと提携し、ビッグデータと人工知能で市のデジタル変革を推進

2019年11月21日〜22日、第一回ファーウェイ宜春市ビッグデータ・人工知能サミットフォーラムと宜...

私をプログラマーと呼ばないで、私は「AIエンジニア」です、マスク氏:自然言語プログラミングを始めましょう

ChatGPTの出現後、人々は「すべての産業がAIによって再編され、一部の職業は置き換えられ、一部の...

...

FenyintaのCTO、張明氏:観光産業を深く掘り下げ、AI技術を使って異言語コミュニケーションの問題を解決する

[51CTO.comからのオリジナル記事] 1930年代初頭、フランスの科学者GBアルチュニは翻訳に...

モンローとドラゴンマザーがあなたと話すことを学びましょう。静止画とビデオだけです

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

4Paradigm が分子特性予測のための生成型 3D 事前トレーニング済みモデルを開発

論文タイトル: 分子特性予測のための自動 3D 事前トレーニング論文リンク: https://arx...

数十人の国内NLP専門家が協力し、事前学習済みモデルの過去、現在、未来を検討した。

[[422361]] BERT や GPT などの大規模な事前トレーニング済みモデル (PTM) ...

...

速報です! ImageNetデータセット内のすべての顔はぼかされている

2012 年、AI 研究者はコンピューター ビジョンで大きな進歩を遂げ、ImageNet として知ら...

年齢を測るAI顔認識

Instagramは、顔をスキャンして年齢を推定できるサードパーティ企業Yotiが開発したAIツール...

ChatGPT を使ってデータを分析する 6 つの方法

翻訳者 |ブガッティレビュー | Chonglouここ数か月で、リリースされる AI ツールの数は増...

エッジAIがスマートホームの未来である理由

今日では、エッジに接続されるデバイスがますます増えています。さらに良いことに、人工知能と機械学習のお...