返回目录 𝑎表示激活的意思,它意味着网络中不同层的值会传递到它们 后面的层中,输入层将𝑥传递给隐藏层,所以我们将输入层的激活值称为𝑎[0];
有输入特征𝑥1、𝑥2、𝑥3,它们被竖直地堆叠起来,这叫做神经网络的输入层。它包含了神经网络的输入;然后这里有另外一层我们称之为隐藏层,这些中间结点的准确值我们是不知道到的,也就是说你看不见它们在 训练集中应具有的值。在本例中最后一层只由一个结点构成,而这个只有一个结点的层被称为输出层,它负责产生预测值。 最后输出层将产生某个数值𝑎,它只是一个单独的实数,这里即y^。
output)
在垂直方向,这个垂直索引对应于神经网络中的不同节点。 从水平上看,矩阵𝐴代表了各个训练样本。从竖直上看,矩阵𝐴的不同的索引对应于不同的隐藏单元,对于矩阵𝑍,𝑋情况也类似,水平方向上,对应于不同的训练样本;竖直方向上,对应不同的输入特征,而这就是神经网络输入层中各个节点。。 当垂直扫描,是索引到隐藏单位的数字。当水平扫描,将从第一个训练示例中从第一个隐藏的单元到第二个训练样本,第三个训练样本……
ReLu修正线性单元的函数函数: 经验选取法则: 如果输出是 0、1 值(二分类问题),则输出层选择 sigmoid 函数,然后其它的所有单元都选择 Relu 函数。 这是很多激活函数的默认选择,如果在隐藏层上不确定使用哪个激活函数,那么通常会使用 Relu 激活函数。有时,也会使用 tanh 激活函数,但 Relu 的一个优点是:当𝑧是负值的时候,导数等于 0。 里也有另一个版本的 Relu 被称为 Leaky Relu。 当𝑧是负值时,这个函数的值不是等于 0,而是轻微的倾斜,如上图最后一个,不常用不过。 如果不确定哪一个激活函数效果更好,可以把它们都试试,然后在验证集或者发展集上进行评价。然后看哪一种表现的更好,就去使用它。
如果你使用线性激活函数或者没有使用一个激活函数,那么无论你的神经网络有多少层一直在做的只是计算线性函数,所以不如直接去掉全部隐藏层。不能在隐藏层用线性激活函数,可以用 ReLU 或者 tanh 或者 leaky ReLU 或者其他的非线性激活函数,唯一可以用线性激活函数的通常就是输出层; 下图表示用线性激活函数的后果:
1)sigmoid activation function 2) Tanh activation function 3)Rectified Linear Unit (ReLU) 4)Leaky linear unit (Leaky ReLU)
如果你要初始化成 0,由于所有的隐含单元都是对称的,无论你运行梯度下降多久,他们一直计算同样的函数。这没有任何帮助,因为你想要两个不同的隐含单元计算不同的函数,这 个 问 题 的 解 决 方 法 就 是 随 机 初 始 化 参 数 。 你 应 该 这 么 做 : 把 𝑊[1] 设 为np.random.randn(2,2)(生成高斯分布),通常再乘上一个小的数,比如 0.01,这样把它初始化为很小的随机数。然后𝑏没有这个对称的问题(叫做 symmetry breaking problem),所以可以把 𝑏 初始化为 0,因为只要随机初始化𝑊你就有不同的隐含单元计算不同的东西,因此不会有 symmetry breaking 问题了。相似的,对于𝑊[2]你可以随机初始化,𝑏[2]可以初始化为 0。 乘的0.01是因为通常倾向于初始化为很小的随机数。因为如果你用 tanh 或者 sigmoid 激活函数,如果𝑤很大,那么你很可能最终停在(甚至在训练刚刚开始的时候)𝑧很大的值,这会造成 tanh/Sigmoid 激活函数饱和在龟速的学习上(因为这个时候激活值a就会不是1就是0),如果你没有 sigmoid/tanh 激活函数在你整个的神经网络里,就不成问题。
返回目录