なぜ疑似ラベル付けを使用すると、結果に大きな影響があるのですか?


19

私は半教師あり学習方法を調査しており、「疑似ラベル付け」の概念に出くわしました。

私が理解しているように、疑似ラベル付けでは、ラベル付けされたデータのセットとラベル付けされていないデータのセットがあります。最初に、ラベル付きデータのみでモデルをトレーニングします。次に、その初期データを使用して、ラベルなしデータを分類(仮ラベルを添付)します。次に、ラベル付きデータとラベルなしデータの両方をモデルのトレーニングにフィードバックし、既知のラベルと予測されたラベルの両方に(再)適合させます。(このプロセスを繰り返し、更新されたモデルでラベルを付け直します。)

主張されている利点は、ラベルなしデータの構造に関する情報を使用してモデルを改善できることです。次の図のバリエーションがよく示され、プロセスが(ラベルなし)データの場所に基づいてより複雑な決定境界を作成できることを「示しています」。

半教師あり手法における決定境界

Techerin CC BY-SA 3.0によるWikimedia Commonsからの画像

しかし、私はその単純な説明を完全には購入していません。単純に、元のラベル付きのみのトレーニング結果が決定境界の上限である場合、疑似ラベルはその決定境界に基づいて割り当てられます。つまり、上の曲線の左手は白の疑似ラベルが付けられ、下の曲線の右手は黒の疑似ラベルが付けられます。新しい疑似ラベルは単に現在の決定境界を強化するだけなので、再トレーニング後は曲線の決定境界が得られません。

別の言い方をすれば、現在のラベル付きのみの決定境界は、ラベルなしデータに対して完全な予測精度を持ちます(それを作成するために使用していたため)。疑似ラベル付きデータを追加するだけで、その決定境界の位置を変更する原因となる原動力(勾配)はありません。

図で具体化された説明が不足していると私は思うのですか?それとも私が見逃しているものはありますか?ない場合は、何である擬似ラベルの利点は、擬似ラベルの上に完璧な精度を持って事前に再訓練決定境界与えられ、?

回答:


16

疑似ラベル付けは、与えられたおもちゃの問題では機能しません

Oliver et al。(2018)異なる半教師あり学習アルゴリズムを評価しました。最初の図は、質問と同じおもちゃの問題(「2つの月」のデータセットと呼ばれる)で疑似ラベル付け(およびその他の方法)がどのように実行されるかを示しています。

ここに画像の説明を入力してください

プロットは、ラベル付けされたデータポイントとラベル付けされていないデータポイント、および異なる半教師あり学習方法を使用してニューラルネットをトレーニングした後に得られた決定境界を示しています。ご想像のとおり、この状況では疑似ラベル付けはうまく機能しません。彼らは、疑似ラベル付けは「おそらくその単純さと一般性のために、実際に広く使用されている単純なヒューリスティックである」と述べています。しかし、「図1に示すように、直感的ではありますが、予測機能が[ラベルのないデータ]の役に立たないターゲットを生成すると、誤った結果が生成される可能性があります。」

なぜ、いつ疑似ラベル付けが機能するのですか?

疑似ラベル付けはLee(2013)によって導入されたので、そこで詳細を見つけることができます。

クラスターの仮定

Leeが疑似ラベル付けについて与えた理論的正当化は、それがエントロピー正則化に似ているということです。エントロピーの正則化(GrandvaletおよびBengio 2005)は、別の半教師付き学習手法であり、分類器がラベルなしデータに対して自信を持って予測を行うことを促進します。たとえば、複数のクラスに分散する確率を拡散するのではなく、特定のクラスに存在する高い確率を割り当てるには、ラベルのないポイントを使用します。目的は、データがクラスに従ってクラスター化されているという仮定(半教師あり学習では「クラスター仮定」と呼ばれます)を利用することです。したがって、近くのポイントは同じクラスを持ち、異なるクラスのポイントはより広く分離されるため、真の決定境界は入力空間の低密度領域を通過します。

疑似ラベル付けが失敗する理由

上記のことを考えると、クラスターの仮定が疑似ラベル付けが機能するために必要な条件であると推測するのは妥当なようです。ただし、上記の2ムーンの問題はクラスターの仮定を満たしているため、明らかに十分ではありませんが、疑似ラベル付けは機能しません。この場合、ラベル付けされたポイントが非常に少なく、適切なクラスター構造をこれらのポイントから識別できないことが問題であると私は推測します。だから、オリバーら。説明して(そして、質問で指摘したように)、結果の疑似ラベルは分類子を誤った決定境界に導きます。おそらく、より多くのラベル付けされたデータがあれば機能します。たとえば、これを、疑似ラベル付けが機能する以下で説明するMNISTの場合とは対照的です。

それが機能する場所

Lee(2013)は、疑似ラベル付けがMNISTデータセット(100〜3000のラベル付きの例)に役立つことを示しました。図では その論文の1つを見ると、600のラベル付きの例でトレーニングされたニューラルネット(半教師あり学習なし)がクラス間のクラスター構造を既に回復していることがわかります。疑似ラベル付けは、構造を洗練するのに役立ちます。これは、2つの月の例とは異なり、いくつかのラベル付きポイントでは適切なクラスターを学習するには不十分であることに注意してください。

また、ラベルが付けられた例が100件しかないため、結果が不安定であったことにも言及しています。これは、疑似ラベリングは初期予測に敏感であり、適切な初期予測には十分な数のラベル付きポイントが必要であるという考えを再び支持します。

Leeはまた、ノイズ除去オートエンコーダを使用した教師なし事前トレーニングがさらに役立つことを示しましたが、これはラベルなしデータの構造を利用する別の方法のようです。残念ながら、教師なしの事前トレーニングのみ(疑似ラベルなし)との比較はありませんでした。

GrandvaletとBengio(2005)は、CIFAR-10とSVHNデータセット(それぞれ4000と1000のラベルの付いた例)の疑似ラベル付けが教師付き学習であることを報告しました。上記のように、これは2つの月の問題の6つのラベル付きポイントよりもはるかに多くのラベル付きデータです。

参考文献


5

自己訓練のしくみで見落としている可能性があるのは、次のとおりです。

  1. これは反復的であり、ワンショットではありません。

  2. 確率値を返す分類子を使用します。各反復で、アルゴリズムが最も確実な場合にのみ疑似ラベルを追加します。

あなたの例では、おそらく最初の反復は、ラベル付けされた各ポイントに非常に近い1つまたは2つのポイントをラベル付けするのに十分な自信があるだけです。次の反復では、これらの4〜6個のラベル付きポイントに対応するために境界がわずかに回転し、非線形の場合はわずかに曲がり始める可能性があります。繰り返す。

動作する保証はありません。これは、基本分類子、アルゴリズム(疑似ラベルを割り当てるためにどの程度確実でなければならないか)、データなどに依存します。

あなたがそれらを使うことができるならもっと強力な他のアルゴリズムもあります。あなたが説明していると私が信じているのは、簡単にコーディングできる自己学習ですが、同じ情報を繰り返し見ている単一の分類子を使用しています。共同トレーニングでは、複数の分類子を使用し、それぞれが各ポイントの異なる情報を調べます。(これはランダムフォレストにいくらか類似しています。)明示的にクラスタリングするものなど、他の半教師付き手法もありますが、全体としては「これは常に機能し、これが勝者です」というわけではありません。

コメントへの応答:私はこの分野の専門家ではありません。私たちはそれをクライアントとの通常のやり取りに非常に適用できると考えているので、私は学習中であり、すべての答えを持っているわけではありません。

私が半教師あり学習の概要を検索したときの一番のヒットは、2008年からの教師あり学習 文献調査です。これは何年も前のことですが、コンピューターの観点から言えば、ここで述べたことについて話しています。

分類子は、ラベル付けされたノードから最も遠いラベル付けされていないポイントを最も確実に評価できると聞きました。一方、私たちの直感は私たちをだますかもしれません。たとえば、黒、白、灰色のノードを持つウィキペディアから取得したグラフィックを考えてみましょう。

まず、これは2Dであり、最も現実的な問題はより高い次元にあり、直観がしばしば私たちを誤解させます。高次元空間は、多くの点で異なった働きをします-いくつかは否定的であり、いくつかは実際に役立ちます。

次に、最初の反復では、右の2つの最下部の灰色の点に黒のラベルが付けられると推測します。黒のラベルの付いた点は、白のラベルの付いた点よりも近いためです。しかし、それが両側で発生した場合、垂直決定境界は依然として傾斜し、もはや垂直ではなくなります。少なくとも私の想像では、直線の場合は、元々ラベルが付けられていた2つのポイントの間の対角線の空きスペースを下ります。それでも2つの三日月は誤って分割されますが、現在はよりデータに合わせられています。継続的な反復-特に非線形の決定境界の場合-は、予想よりも良い答えをもたらす可能性があります。

第三に、一度ラベル付けされた、常にラベル付けされたがそれが実際に機能する方法であるかどうかはわかりません。その方法とアルゴリズムの動作に応じて、最初に境界を曲げながら(非線形であると仮定して)境界を傾け、次に三日月の誤って分類された部分の一部がラベルをシフトする可能性があります。

私の直感は、これらの3つのポイントを適切な(おそらくより高次元の)データと組み合わせると、適切な分類子は、非常に少数のトレーニング(ラベル付き)サンプルで監視されたストレートアップよりも優れています。保証はありません。また、私が見つけた実験では、単純すぎるデータセットのせいで、半監視対象が監視対象に比べてわずかに改善するだけで、時にはひどく失敗する可能性があることがわかりました。繰り返しになりますが、私は作成した2つのアルゴリズムを実際に使用している場合とそうでない場合があります。


2
どのような分類子/状況が機能するかを詳しく説明していただけますか?示されている種類のデータ例に取り組んでいるほとんどの分類子についての私の理解は、高い信頼度を得るのは決定境界から遠い点(既知の点に近い点ではない)であるため、それらの遠位の尾は間違いなく誤って分類されます例。(さらに、疑似ラベル付けと関連技術を効果的に使用するために参照できる参考資料/参考資料をいただければ幸いです。)
RM

@RM編集済み。どのようだ?
ウェイン、

1

警告、私はこの手順の専門家ではありません。私が良い結果を出せなかったことは、この技術が機能しないことを証明するものではありません。さらに、あなたの画像には、「半教師あり」学習の一般的な説明が含まれています。これは、さまざまな技術を備えた広い領域です。

私はあなたの直感に同意します、私はこのようなテクニックが箱から出してすぐに機能する方法を見ていません。つまり、特定のアプリケーションでうまく機能させるには多くの努力が必要だと思います。その努力は、他のアプリケーションでは必ずしも役立つとは限りません。

私は2つの異なるインスタンスを試しました。1つは例の画像のようなバナナ型のデータセット、もう1つは2つの単純な正規分散クラスターを含む簡単なデータセットです。どちらの場合も、最初の分類子を改善できませんでした。

物事を奨励する小さな試みとして、私はこれがより良い結果をもたらすことを期待してすべての予測された確率にノイズを追加しました。

最初の例では、上の画像をできる限り忠実に再現しました。ここでは、疑似ラベル付けがまったく役に立たないと思います。

一例、バナナ型のデータ

2番目の例の方がはるかに簡単ですが、ここでも最初の分類子を改善できません。具体的には、左のクラスの中央から1つのラベル付きポイントを選択し、右のクラスの右側が正しい方向にシフトして、そのような運がなかったことを期待しました。

例2、2D正規分布データ] =

例1のコード(例2は十分に似ているので、ここでは複製しません):

import numpy as np
from sklearn.ensemble import RandomForestClassifier
import matplotlib.pyplot as plt
import seaborn

np.random.seed(2018-10-1)
N = 1000

_x = np.linspace(0, np.pi, num=N)
x0 = np.array([_x, np.sin(_x)]).T
x1 = -1 * x0 + [np.pi / 2, 0]

scale = 0.15
x0 += np.random.normal(scale=scale, size=(N, 2))
x1 += np.random.normal(scale=scale, size=(N, 2))

X = np.vstack([x0, x1])

proto_0 = np.array([[0], [0]]).T # the single "labeled" 0
proto_1 = np.array([[np.pi / 2], [0]]).T # the single "labeled" 1

model = RandomForestClassifier()
model.fit(np.vstack([proto_0, proto_1]), np.array([0, 1]))
for itercount in range(100):
    labels = model.predict_proba(X)[:, 0]
    labels += (np.random.random(labels.size) - 0.5) / 10 # add some noise
    labels = labels > 0.5
    model = RandomForestClassifier()
    model.fit(X, labels)

f, axs = plt.subplots(1, 2, squeeze=True, figsize=(10, 5))

axs[0].plot(x0[:, 0], x0[:, 1], '.', alpha=0.25, label='unlabeled x0')
axs[0].plot(proto_0[:, 0], proto_0[:, 1], 'o', color='royalblue', markersize=10, label='labeled x0')
axs[0].plot(x1[:, 0], x1[:, 1], '.', alpha=0.25, label='unlabeled x1')
axs[0].plot(proto_1[:, 0], proto_1[:, 1], 'o', color='coral', markersize=10, label='labeled x1')
axs[0].legend()

axs[1].plot(X[~labels, 0], X[~labels, 1], '.', alpha=0.25, label='predicted class 0')
axs[1].plot(X[labels, 0], X[labels, 1], '.', alpha=0.25, label='predicted class 1')
axs[1].plot([np.pi / 4] * 2, [-1.5, 1.5], 'k--', label='halfway between labeled data')
axs[1].legend()
plt.show()

1

これが私の推測です(このトピックについてはあまり知りませんが、この議論に2セントを追加したかっただけです)。

あなたが正しいと思います。古典的なモデルをトレーニングし、その予測をデータとして使用する意味はありません。なぜなら、あなたが言うように、オプティマイザにもっと良いインセンティブがないからです。データセットが大きいため、ランダム化された開始アルゴリズムは、以前に見つかった最適が正しいことを「より確実」にするため、同じ最適を見つける可能性が高いと思いますが、これは無関係です。

とは言っても、最初に受け取った回答にはポイントがあります。ウィキペディアの例ではクラスタリングについて話しているので、それがすべての違いを生んでいると思います。ラベル付けされていないデータを取得すると、基本的に、他のラベル付けされたものと同様に、いくつかの共有された「潜在的な特徴空間」上にラベル付けされていない点の束が存在します。あなたは非標識点を分離することができるという事実発見できる場合にのみ、本当に、より良いラベル付きデータに訓練された分類アルゴリズムより行うことができ、次にラベルされたポイントは、この潜在特徴空間上に属し、どのクラスに基づいて分類を。

つまり、これを行う必要があります。

labelleddataclusteringclassification

...そして、ラベルのないデータで繰り返します。ここでは、クラスタリングはクラスラベルを考慮しないため、学習されたクラスター境界同じではありません。クラスタリングは潜在的な特徴空間を生成し、その上で分類境界が学習されます。これはラベル付きデータにのみ依存します。

なんらかのクラスタリングを実行しないアルゴリズムは、ラベル付けされていないデータセットに基づいて最適化を変更できないと思います。

ちなみに、あなたがリンクした画像は、私がここで何が起こっているのかを説明しようと思っています。決定境界は、クラスタリングアルゴリズムのみに基づいて学習されます。ここに正しいクラスが何であるはわかりません-それらがすべてランダムである可能性があります-私たちは知りません。これでできることは、特徴空間に何らかの構造があり、特徴空間からクラスラベルへのマッピングがあるように見えることだけです。

参照は実際にはありませんが、このReddit投稿では、私が理解しているように、GANが半教師あり学習を実行することについての議論があります。暗黙的にクラスタリングを実行し、その後に分類を実行することは私の考えです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.