16

確率を推定するために、ニューラルネットワークでシグモイドまたはタン出力層を直接使用することは良い習慣ですか?

つまり、与えられた入力が発生する確率は、NNのシグモイド関数の出力です。

編集
ニューラルネットワークを使用して、特定の入力が発生する確率を学習および予測したかったのです。入力をState1-Action-State2タプルと見なすことができます。したがって、NNの出力は、State1にアクションを適用するときにState2が発生する確率です。

私はそれが明確なことをすることを願っています。

編集
NNをトレーニングするとき、私はState1に対してランダムなアクションを実行し、結果のState2を観察します。次に、入力State1-Action-State2が出力1.0になることをNNに教えます。

4

3 に答える 3

21

まず、従来のMLPレキシコンのいくつかの小さな点(インターネット検索などに役立つ可能性があります):「sigmoid」と「tanh」は「出力層」ではなく、通常「活性化関数」と呼ばれる関数です。活性化関数の戻り値は、実際には各レイヤーからの出力ですが、出力レイヤー自体ではありません(確率も計算されません)。

さらに、あなたの質問は2つの「代替」(「シグモイドとタン」)の間の選択を述べていますが、それらは実際には代替ではなく、「シグモイド関数」という用語は、双曲線を含む関数のクラスの一般的/非公式な用語です参照するタンジェント('tanh')。

「シグモイド」という用語は、おそらく関数の特徴的な形状に起因します。戻り値(y)は、x値に関係なく、2つの漸近値の間に制約されます。関数の出力は通常、これら2つの値が-1と1(または0と1)になるように正規化されます。(ちなみに、この出力動作は明らかに、発火する(+1)または発火しない(-1)生物学的ニューロンに触発されています)。シグモイド関数の主要なプロパティを見ると、フィードフォワード、バックプロパゲーションニューラルネットワークの活性化関数として理想的に適している理由がわかります。(i)実数値で微分可能、(ii)変曲点が1つだけ、( iii)一対の水平方向の漸近線を持っている。

同様に、シグモイド関数は、バックプロパゲーションを使用して解決されるFFニューラルネットワークで活性化関数(別名「押しつぶし関数」)として使用される関数の1つのカテゴリです。トレーニングまたは予測中に、入力の加重和(特定のレイヤーについて、一度に1つのレイヤー)が、そのレイヤーの出力を返すアクティブ化関数への引数として渡されます。活性化関数として明らかに使用されている関数の別のグループは、区分的線形関数です。ステップ関数は、PLFのバイナリバリアントです。

def step_fn(x) :
  if x <= 0 :
    y = 0
  if x > 0 :
    y = 1    

(実際的な理由から、ステップ関数が活性化関数のもっともらしい選択であるとは思えませんが、おそらくそれはNN操作での活性化関数の目的を理解するのに役立ちます。)

可能な活性化関数の数は無制限だと思いますが、実際にはほんの一握りしか見えません。実際、圧倒的多数のケースを占めるのは2つだけです(どちらもシグモイドです)。ここに(Pythonで)あるので、主要な選択基準が実用的なものであるとすると、自分で実験することができます。

# logistic function
def sigmoid2(x) :
  return 1 / (1 + e**(-x))   

# hyperbolic tangent
def sigmoid1(x) :
  return math.tanh(x)

活性化関数を選択する際に考慮すべき要素は何ですか?

最初に、関数は目的の動作を提供する必要があります(シグモイド形状から、またはシグモイド形状によって証明されるように)。第二に、関数は微分可能でなければなりません。これはバックプロパゲーションの要件です。これは、トレーニング中に隠れ層の値を「埋める」ために使用される最適化手法です。

たとえば、双曲線正接の導関数は次のようになります(出力に関しては、通常の記述方法です):

def dsigmoid(y) :
  return 1.0 - y**2

これらの2つの要件を超えて、ある機能を別の機能よりも効率的にトレーニングするのは、ネットワークをどれだけ効率的にトレーニングするかです。つまり、最も少ないエポックで収束(極小誤差に達する)を引き起こすのはどれですか。

#--------編集(下記のOPのコメントを参照)---------#

私が理解したかどうかはよくわかりません-コードなしでNNの詳細を伝えるのは難しい場合があるので、この条件に従って問題ないことを言っておく必要があります:NNに予測させたいことは、トレーニング中に使用される従属変数。したがって、たとえば、2つの状態(たとえば、0、1)を単一の従属変数(テスト/本番データから明らかに欠落している)として使用してNNをトレーニングする場合、「予測モード」で実行するとNNが返されます。 (トレーニング後、または有能なウェイトマトリックスを使用)。

于 2010-05-07T02:21:28.053 に答える
6

最小化するには、適切な損失関数を選択する必要があります。二乗誤差は、ここで最尤仮説を導きません。二乗誤差は、ガウスノイズのあるモデルから導出されます。

P(y|x,h) = k1 * e**-(k2 * (y - h(x))**2)

確率を直接推定します。モデルは次のとおりです。

P(Y=1|x,h) = h(x)
P(Y=0|x,h) = 1 - h(x)

P(Y = 1 | x、h)は、xを見た後にイベントY=1が発生する確率です。

モデルの最尤仮説は次のとおりです。

h_max_likelihood = argmax_h product(
    h(x)**y * (1-h(x))**(1-y) for x, y in examples)

これにより、「クロスエントロピー」損失関数が発生します。 損失関数とその導出については、ミッチェルの機械学習の第6章を参照してください。

于 2010-05-25T09:35:41.973 に答える
4

このアプローチには1つの問題があります。R^nからのベクトルがあり、ネットワークがそれらのベクトルを区間[0、1]にマッピングする場合、ネットワークが有効な確率密度関数を表すことは保証されません。ネットワークが1に等しいとは限りません。

たとえば、ニューラルネットワークは任意の入力フォームR^nを1.0にマッピングできます。しかし、それは明らかに不可能です。

したがって、あなたの質問に対する答えは次のとおりです。いいえ、できません。

ただし、ネットワークが「非現実的な」コードサンプルを認識しないため、この事実を無視していると言えます。これについての議論(およびニューラルネットワークでPDFをモデル化する方法に関するいくつかのよりクールな情報)については、対照的なバックプロパゲーションを参照してください。

于 2010-05-09T21:00:07.693 に答える