逻辑回归
对于二分类问题,假设输入为X,是一张关于猫图片,我们想预测它是否为猫,也就是神经网络输出值有多接近1。输入的X其实为有n个特征的特征向量,我们训练神经网络其实是输入样本和标签,对w和b进行训练,这里的w和b维度与特征向量相同。训练完成之后得到的参数w和b,用来产生输出预测值。而下面这个公式计算出来的预测值通常不在0-1之间,因此将下面的式子作为自变量传入激活函数,对于二分类问题即sigmoid函数,得到0-1之间的预测值。
为了训练逻辑回归模型的参数参数和参数我们,需要一个代价函数,通过训练代价函数来得到参数和参数。先看一下逻辑回归的输出函数:
为了让模型通过学习调整参数,你需要给予一个样本的训练集,这会让你在训练集上找到参数和参数,,来得到你的输出。
损失函数:
是我们的预测值与实际值之间的差值
我们在逻辑回归中用到的损失函数是:
假如我们有m个样本,则算法的代价函数:
在训练逻辑回归模型时候,我们需要找到合适的和,来让代价函数的总代价降到最低。即我们想让损失尽可能的小,也就是预测值尽可能接近结果y,去训练得到w和b。
对于softmax函数,计算方式如下,输入值为k个样本,输出值进行归一化处理,输出每个分类的概率;
损失函数:
梯度下降
在上一节中,我们想让损失函数J(w,b)尽可能的小,函数如图所示(注:定义的函数必须是凸函数)
如图,w和b是随机初始化的,因此刚开始的J值可能在图中任意一个点上,为了使J值最小,也就是到达函数的最低点,我们使用梯度下降的方法。
以二维图像为例:
假如此时的J值在这个位置,导数为负,我们要接近最低点,就是用下图的公式,向左移动。:=表示更新参数,a 表示学习率(learning rate),用来控制步长(step),即向下走一步的长度,函数对J求导(derivative),代码中dw表示这个结果
一个神经网络的计算,都是按照前向或反向传播过程组织的。首先我们计算出一个新的网络的输出(前向过程),紧接着进行一个反向传输操作。后者我们用来计算出对应的梯度或导数,在下一次的计算过程中,就可以根据梯度调整w和b的值,使得代价函数更小,需要大量的重复这个步骤。
随机初始化
随机初始化参数很重要,而不是初始化成全零。当你参数初始化成某些值后,每次梯度下降都会循环计算以下预测值:
如果把权重初始化为0,两个隐含单元计算同样的函数,当你做反向传播计算时,这会导致dz1和dz2也会一样,对称这些隐含单元会初始化得一样,这样输出的权值也会一模一样,而我们想要两个不同的隐含单元计算不同的函数,这个问题的解决方法就是随机初始化参数。使用np.random.randn(2,2),再乘上0.01,原因我们通常倾向于初始化为很小的随机数,可以在激活函数的图形上看出来w越大越平坦,梯度下降就会很慢,学习效率就低。
这里牵扯到隐含单元个数,即神经元了。
通常,对所有隐藏层使用相同数量的神经元就足够了。对于某些数据集,拥有较大的第一层并在其后跟随较小的层将导致更好的性能,因为第一层可以学习很多低阶的特征,这些较低层的特征可以馈入后续层中,提取出较高阶特征。
就是说,越多的神经元拟合效果越好,但注意太多会导致过拟合。