次のTensorFlow関数では、最終層の人工ニューロンの活性化をフィードする必要があります。わかりました。しかし、なぜそれがロジットと呼ばれるのか理解できませんか?それは数学関数ではないですか?
loss_function = tf.nn.softmax_cross_entropy_with_logits(
logits = last_layer,
labels = target_output
)
ロジットは多くの異なることを意味する可能性があるオーバーロードされた用語です。
数学の場合 、 Logit は確率([0, 1]
)をR((-inf, inf)
)にマッピングする関数です。
0.5の確率は0のロジットに対応します。負のロジットは0.5未満の確率に対応し、> 0.5までの正数です。
MLでは 、それは{ なることもある
分類モデルが生成する生の(正規化されていない)予測のベクトル。通常は正規化関数に渡されます。モデルが多クラス分類問題を解いている場合、ロジットは通常、softmax関数への入力になります。次に、softmax関数は、可能性のあるクラスごとに1つの値を持つ(正規化された)確率のベクトルを生成します。
ロジットも同様に 時々 はシグモイド関数の要素ごとの逆行列を表します。
Logit は、確率[0, 1]
を[-inf, +inf]
にマッピングする関数です。
Softmax はSigmoidと同様に[-inf, +inf]
を[0, 1]
にマッピングする関数です。しかし、Softmaxはまた、値の合計(出力ベクトル)を1に正規化します。
Tensorflow "with logit" :正規化するためにロジット数にsoftmax関数を適用しているという意味です。 input_vector/logitは正規化されておらず、[ - inf、inf]から拡大縮小できます。
この正規化は、マルチクラス分類問題に使用されます。そしてマルチラベル分類問題のためにシグモイド正規化が使われます、すなわちtf.nn.sigmoid_cross_entropy_with_logits
多くの間違った答えが支持されているので、これだけスクロールした人が誰でも正しく理解できるように、この説明を追加するだけです。
Dianshengの answer およびJakeJの answer 正しくする。
Shital Shahが投稿した新しい回答 は、さらに優れた、より完全な回答です。
はい、logit
は統計的には 関数 として、 として使われますが、ニューラルネットワークのコンテキストで使われるlogit
は異なります。 統計logit
はここでも意味を成しません。
正式な定義名はどこにも見つかりませんでしたが、logit
は基本的に次のような意味です。
ニューラルネットワークの最後の層から出てくる生の予測。
1。これは、予測クラスを取得するためにargmax
関数を適用するテンソルです。
2。これは、予測クラスの確率を得るためにsoftmax
関数に入力するテンソルです。
また、公式テンソルフローWebサイトの チュートリアル からも:
ロジット層
私たちのニューラルネットワークの最後の層はロジット層で、これは私たちの予測の生の値を返します。線形活性化(デフォルト)を使って、10個のニューロン(各ターゲットクラス0〜9に1つずつ)で密集した層を作成します。
logits = tf.layers.dense(inputs=dropout, units=10)
まだ混乱しているならば、状況は以下の通りです:
raw_predictions = neural_net(input_layer)
predicted_class_index_by_raw = argmax(raw_predictions)
probabilities = softmax(raw_predictions)
predicted_class_index_by_prob = argmax(probabilities)
predicted_class_index_by_raw
とpredicted_class_index_by_prob
は等しくなります。
上記のコードのraw_predictions
の別の名前はlogit
です。
なぜ logit
...は私にはわかりません。ごめんなさい。
[編集:[編集: この答え /この言葉の背後にある歴史的動機について]を参照。
ただし、必要に応じて、logit
関数から得られる統計的なprobabilities
をsoftmax
に適用することもできます。
あるクラスの確率がp
の場合、
そのクラスの log-odds はL = logit(p)
です。
また、 sigmoid
関数を使用して、そのクラスの確率をp = sigmoid(L)
として回復できます。
ただし、対数オッズを計算するのにはあまり役立ちません。
TensorFlowドメインでは、ロジットはsoftmaxへの入力として使用される値です。このテンソルフローチュートリアルに基づいて私はこの理解に至りました。
https://www.tensorflow.org/tutorials/layers
ロジットが数学(特に統計学)の機能であることは事実ですが、それがあなたが見ているのと同じ「ロジット」ではないと思います。その本の中で ディープラーニング / Ian Goodfellowによると、彼は言った、
関数σ-1(x)は統計学でロジットと呼ばれますが、この用語は機械学習ではめったに使用されません。 σ-1(x)はロジスティックシグモイド関数の逆関数を表す。
TensorFlowでは、これは最後のレイヤの名前としてよく見られます。 AurélienGéronによる Scikit-learnとTensorFLow を使った実践的な機械学習の本の第10章で、logits
name__レイヤーを明確に述べたこの段落に出くわしました。
logits
name__は、softmax起動関数を通過するニューラルネットワーク before の出力です。最適化のために、後でsoftmaxの計算を行います。
つまり、設計の最後の層でソフトマックスを起動関数として使用していますが、計算を容易にするために、logits
name__を個別に取り出します。 softmax
name__とcross-entropy
lossを一緒に計算する方が効率的だからです。 cross-entropy
はコスト関数であり、順方向伝播では使用されません。
まとめ
logits層 を深く学習するという文脈では、/はsoftmax(または他のそのような正規化)にフィードする層を意味します。 softmaxの出力は分類タスクの確率であり、その入力はロジット層です。ロジット層は通常-∞から+無限大の値を生成し、softmax層はそれを0から1の値に変換します。
歴史的背景
この用語はどこから来たのでしょうか。 1930年代と40年代に、何人かの人々が確率を予測する問題に線形回帰を適応させようとしていました。ただし、線形回帰は-∞から+無限大までの出力を生成します。一方、確率については、0から1が望ましい出力です。これを行う1つの方法は、確率0から1を-∞から+無限大にマッピングしてから通常どおり線形回帰を使用することです。そのようなマッピングの1つは、1934年にChester Ittner Blissによって使用された累積正規分布です。彼はこの「プロビット」モデルを「確率単位」の略です。しかしながら、この機能は、多クラス分類のための望ましい特性のいくつかを欠いている間、計算上高価である。 1944年、Joseph Berksonはこのマッピングを行うために関数log(p/(1-p))
を使い、それをロジットと呼びました。「ロジスティック単位」の略です。ロジスティック回帰という用語もこれから派生したものです。
混乱
残念ながら、ロジットという用語は深い学習では悪用されています。純粋な数学的観点からすると、ロジットは上記のマッピングを実行するfunctionです。深層学習では、人々はロジット機能にフィードインする「ロジット層」という層を呼び始めました。それから人々はこの層 "logit"の出力valuesを呼び始め、logit 関数との混乱を作り出しました。
TensorFlowコード
残念ながら、TensorFlowコードはさらにtf.nn.softmax_cross_entropy_with_logits
のような名前で混乱を招きます。ロジットとはどういう意味ですか?それは、単に関数の入力が上記の最後のニューロン層の出力であると想定されることを意味します。 _with_logits
サフィックスは 冗長で、紛らわしく無意味です 。関数は、他の多くのドメインから派生した値に対して実行できる単なる数学的演算であるため、そのような非常に特殊なコンテキストに関係なく名前を付ける必要があります。実際、TensorFlowには同様の関数sparse_softmax_cross_entropy
がありますが、幸いなことに_with_logits
サフィックスを追加して矛盾を生じさせ、混乱を招きます。一方、PyTorchは単にこのような接尾辞を付けずにその機能に名前を付けます。
参照
ロジット/プロビット講義スライド はロジットを理解するための最良のリソースの1つです。私はまた ウィキペディアの記事 を上記の情報のいくつかと共に更新しました。
これは将来の読者のための簡潔な答えです。 Tensorflow
のlogit
は、活性化関数を適用しないでニューロンの出力として定義されます。
logit = w*x + b,
x:入力、w:重み、b:バイアスそれでおしまい。
以下はこの質問とは無関係です。
歴史的な講義については、他の答えを読んでください。 Tensorflow
の「独創的に」混乱を招く命名規則に敬意を表します。 PyTorch
には、CrossEntropyLoss
が1つだけあり、アクティブでない出力を受け入れます。畳み込み、行列の乗算、そして活性化は同じレベルの操作です。デザインははるかにモジュール化され、混乱が少なくなります。これが、私がTensorflow
からPyTorch
に切り替えた理由の1つです。
興味を持っているクラスの数だけに当てはまるまでは、それらは基本的にネットワークから得ることができる完全に学習されたモデルです。ネットワークが学んだ: https://arxiv.org/pdf/1312.6184.pdf
それは一種の主題を詳細に学ぶとき、あなたは非常に多くのマイナーな点を学ぶでしょうが、それから学生を教えるとき、あなたはそれを最も単純な場合に圧縮しようとするようなものです。もし生徒が今教えようとするなら、それはかなり難しいでしょう、しかしその言語を使うのにちょうど十分にそれを記述することができるでしょう。
Logit(/ ˈloHdʒɪt/LOH-jit)関数は、数学、特に統計学で使用されるシグモイド型の "logistic"関数またはロジスティック変換の逆関数です。関数の変数が確率pを表すとき、ロジット関数は対数オッズ、またはオッズp /(1 - p)の対数を与えます。
こちらを参照してください: https://en.wikipedia.org/wiki/Logit
( FOMO sapiens)。
数学Logit関数をチェックすると、実空間を[0,1]
間隔から無限大[-inf, inf]
に変換します。
シグモイドとソフトマックスはまったく逆のことを行います。 [-inf, inf]
実空間を[0, 1]
実空間に変換します。
これが、シグモイド関数とソフトマックス関数の前にlogitを使用する可能性がある(それらが一致するため)機械学習で意味がある理由です。
そして、これが機械学習で「シグモイド」または「ソフトマックス」がロジットを機能させる機械学習で「私たちが呼ぶかもしれない」anythingです。
ここにJ.ヒントンがあります video この用語を使用します。
PS。用語を確認するためだけにビデオを視聴することはお勧めしません。