DL基础
激活函数
$g’(z)=g(z)(1-g(z))$
tanh:$g(z)=tanh(z)=a=\frac{e^z-e^{-z}}{e^z+e^{-z}}$,$g’(z)=(1-g^2(z))$
ReLU:$g(z)=a=max(0,z)$
leaky ReLU:$a=max(0.01z,z)$
损失函数
常见的损失函数有均方误差和交叉熵误差
均方误差(MSE)
公式:$E = \frac{1}{2} \sum_{k}(y_k - t_k)^2$,其中$y_k$表示神经网络的输出,$t_k$表示监督数据,k表示数据的维数。
python实现:
1 | def mean_squared_error(y, t): |
交叉熵误差
公式:$E = -\sum_{k} t_k \log y_k$
python实现:
1 | def cross_entropy_error(y, t): |
这里,参数y和t是NumPy数组。函数内部在计算np.log时,加上了一个微小值delta。这是因为,当出现np.log(0)时,np.log(0)会变为负无限大的-inf,这样一来就会导致后续计算无法进行。作为保护性对策,添加一个微小值可以防止负无限大的发生。
one-hot编码
将正确解标签表示为1,其他标签表示为0的表示方法称为one-hot编码
mini-batch
神经网络的学习也是从训练数据中选出一批数据,然后对每个mini-batch进行学习。比如,从60000个训练数据中随机选择100笔,再用这100笔数据进行学习。这种学习方式称为mini-batch学习,同时,mini-batch的损失函数也是利用 一部分样本数据来近似地计算整体
mini-batch版交叉熵误差的实现
1 | def cross_entropy_error(y, t): |
当监督数据是标签形式(非one-hot表示,而是像“2”“ 7”这样的标签)时,交叉熵误差可通过如下代码实现。
1 | def cross_entropy_error(y, t): |
实现的要点是,由于one-hot表示中t为0的元素的交叉熵误差也为0,因 此针对这些元素的计算可以忽略。换言之,如果可以获得神经网络在正确解标签处的输出,就可以计算交叉熵误差。因此,t为one-hot表示时通过 t * np.log(y) 计算的地方,在t为标签形式时,可用np.log( y[np.arange (batch_size), t] )实现相同的处理
梯度法
通过使用梯度来寻找函数最小值(或者尽可能小的值)的方法,即通过不断地沿梯度方向前进, 逐渐减小函数值的过程,常见的参数更新公式$x_0 = x_0 - \eta \frac{\partial f}{\partial x_0}$、$x_1 = x_1 - \eta \frac{\partial f}{\partial x_1}$就来自于此
通过梯度下降法更新参数,并且当使用的数据是随机选择的mini batch数据时,称该方法为随机梯度下降法(SGD)
神经网络的学习过程
前提
神经网络存在合适的权重和偏置,调整权重和偏置以便拟合训练数据的过程称为“学习”。神经网络的学习分成下面4个步骤。
步骤1(mini-batch)
从训练数据中随机选出一部分数据,这部分数据称为mini-batch。我们的目标是减小mini-batch的损失函数的值。
步骤2(计算梯度)
为了减小mini-batch的损失函数的值,需要求出各个权重参数的梯度。 梯度表示损失函数的值减小最多的方向。
步骤3(更新参数)
将权重参数沿梯度方向进行微小更新。
步骤4(重复)
重复步骤1、步骤2、步骤3。
Logistic Regression cost function
$$
\hat{y}=\sigma(w^Tx+b),where\ \sigma(z)=\frac{1}{1+e^{-z}}
$$
Loss function:通常采用$L(\hat{y},y)=\frac{1}{2}(\hat{y}-y)^2$作为loss function,在逻辑回归中不这么做,因为其对梯度下降法很可能找不到全局最优值
我们采用的是对数损失函数$L(\hat{y},y)=-(ylog\hat{y}+(1-y)log(1-\hat{y}))$,它是一个凸函数
Cost function:$J(w,b)=\frac{1}{m}\sum{_{i=1}^mL(\hat{y}^{(i)},y^{(i)})}$








