假设你有一个使用Sigmoid函数的神经网络。它有一个输入x,因此一个节点会输出tanhx到一个连接。该连接会输出w∗tanhx,其中w是连接的权重。
问题是,如果输入为0,而期望的输出应该是1怎么办?如果输入是0,连接的输出将是w∗tanh0=0。因此,如果输入是0,无论你添加多少节点或连接,或者连接的权重如何调整,输出总是会是0。
你如何构建一个简单的网络,使得输入为0时输出不是0呢?
回答:
补充说明
需要注意的是,每层的函数形式应该是这样的:
z = transpose(W) * Xoutput = tanh(z)
其中,你在传递到传输函数(tanh)之前先乘以权重向量。然而,这并不能回答你的问题或解决你的问题。
第一种方法
为了回答你的问题,你应该在输入中添加一个偏置单元。一种方法是使用一个常数输入1作为输入。
所以,如果你有伪代码:number_of_inputs = 10
,你应该改用伪代码:number_of_inputs = 11; input[10] = 1
。
这使得你的输出函数可以保持与上述相同的形式。
第二种方法
你也可以在传输函数之外添加一个偏置单元。也就是说,你的输出可以是这样的形式:
z = transpose(W) * Xoutput = tanh(z) + b
然后,b
的更新规则将基于你的损失的导数,而不是传输函数的导数。