web-dev-qa-db-ja.com

tf.truncated_normalとtf.random_normalの違いは何ですか?

tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)は、正規分布からランダムな値を出力します。

tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)は、切り捨てられた正規分布からランダムな値を出力します。

「切り捨てられた正規分布」をググリングしてみました。しかし、あまり理解していませんでした。

44
Tarun Wadhwa

documentation はすべてを表しています:切り捨てられた正規分布の場合:

生成された値は、平均と標準偏差が指定された正規分布に従いますが、大きさが平均から2標準偏差を超える値は削除され、再選択されます。

ほとんどの場合、グラフを自分でプロットすることで違いを理解するのは簡単です(%magicはjupyterノートブックを使用しているためです)。

import tensorflow as tf
import matplotlib.pyplot as plt

%matplotlib inline  

n = 500000
A = tf.truncated_normal((n,))
B = tf.random_normal((n,))
with tf.Session() as sess:
    a, b = sess.run([A, B])

そしていま

plt.hist(a, 100, (-4.2, 4.2));
plt.hist(b, 100, (-4.2, 4.2));

enter image description here


切り捨てられた法線を使用するポイントは、シグモイドのようなトーム関数の飽和を克服することです(値が大きすぎる/小さすぎる場合、ニューロンは学習を停止します)。

65
Salvador Dali

tf.truncated_normal()は、平均が0に近く、値が0に近い正規分布から乱数を選択します。たとえば、-0.1から0.1です。正規分布から裾を切り落とすため、切り捨てと呼ばれます。

tf.random_normal()は、平均が0に近い正規分布から乱数を選択しますが、値は少し離れている場合があります。たとえば、-2から2です。

機械学習では、実際には、通常、重みを0に近づける必要があります。

23
ksooklall

tf.truncated_normal()のAPIドキュメント は、関数を次のように説明しています。

切り捨てられた正規分布からランダムな値を出力します。

生成された値は、平均と標準偏差が指定された正規分布に従いますが、大きさが平均から2標準偏差を超える値は削除され、再選択されます。

8
Martin Svedin