第三章 神经网络
神经网络结构
输入层->中间层(隐藏层)->输出层
神经网络与感知机的差异
向下一个神经元发送信号时,改变信号的激活函数有很大差异。
神经网络中使用的是平滑变化的sigmoid函数,而感知机中使用的是信号急剧变化的阶跃函数。
激活函数
激活函数将输入信号的总和转换为输出信号
作用在于决定如何来激活输入信号的总和
sigmoid函数
def sigmoid(x):return 1 / (1 + np.exp(-x))
不管输入信号有多小,或者有多大,输出信号都在0到1之间
为了发挥叠加层所带来的有事,激活函数必须使用非线性函数
ReLU函数
ReLU函数在输入大于0 时,直接输出该值;在输入小于等于0 时,输出0
def relu(x):return np.maximum(0, x)
使用np.dot计算矩阵的点积
关于输出层的激活函数
分类问题是数据属于哪一个类别的问题,而回归问题是根据某个输入预测一个(连续的)数值的问题
需要根据情况改变输出层的激活函数。回归问题用恒等函数,分类问题用softmax 函数
softmax函数
def softmax(a):c = np.max(a)exp_a = np.exp(a - c) # 溢出对策sum_exp_a = np.sum(exp_a)y = exp_a / sum_exp_areturn y
softmax函数的输出是0.0 到1.0之间的实数。并且,softmax函数的输出值的总和是1
因为有了这个性质,我们才可以把softmax 函数的输出解释为“概率”
输出层的神经元数量需要根据待解决的问题来决定。对于分类问题,输出层的神经元数量一般设定为类别的数量
输入数据的集合称为批,通过批处理可以实现计算机高速运算
sigmoid函数和softmax函数的区别和联系
多标签分类任务使用softmax函数
二分类任务使用sigmoid函数