线性函数(也叫得分函数):
输入图像经过一个函数映射得到图像属于每个类别的得分,x为图像数据矩阵,W表示属于某个类别的权重参数。
划分10个类别,W1表示属于猫类别的权重,W1*x表示属于猫的得分,W2、W3.....依次类推。
“b” 属于一个偏置项,用来微调 ,表示对于得到的10个类别都要进行微调。权重参数W对结果起决定性作用。
假设输入图像xi有4个像素点 ,划分为三个类别cat、dog、ship;W1的4个权重值的大小表示对应像素点对于cat类别的重要程度,0.2与56对应,-0.5与231对应。每个类别的权重值大小表示对应像素点对当前类别的影响的重要程度,比如w2(1.5,1.3,2.1,0)中0对应像素2,表示像素点2对于类别dog的影响比较小,正值代表促进的作用,负值代表抑制的作用。
w1*xi+b =-96.8,得到属于cat类别的得分,依次类推。
神经网络的作用就是什么样的W能更适合数据做当前的任务,我们就怎么样改变这个W,一开始拿随机值做W,在迭代过程中想办法不断改进W参数。
损失函数:衡量分类或者回归结果的好坏,损失函数是当我们获得一个结果后才能评估的,做得好损失值小,做的不好损失值大
例如:第一幅猫图像属于cat类别是3.2分,属于car类别是5.1分,错误判断为car类别。Sj表示错误类别得分,Syi表示正确类别得分
损失函数当其值为0时代表没有损失,加“+1”表示正确类别至少比错误类别高1以上才算没有损失的
损失函数改进
虽然下面两个模型的损失函数值相同,但两个模型不一样 ,模型A中后3个权重值为0,说明它只关注输入数据中的第1个,只关注局部后面的不关注。模型B是对输入数据的每一个都关注。
假设模型A输出数据如下图,会产生变异,我们希望得到的是模型B的图
因此在构建损失函数的时候加入正则化惩罚项,用来去掉变异,入值比较大说明要去掉数据中的变异,神经网络过于强大的,过拟合的风险越大
softmax函数,又称为归一化指数函数 目的是将分类的结果以概率的形式展现出来。
归一化处理就是将转化后的结果除以所有转换后结果之和,可以理解为转化后结果占总数的百分比,这样就可以得到近似的概率。
通过exp映射,将差异放大,x=3.2, e^x = 24.5, x=5.1, e^5.1 = 164,依次类推。
通过归一化normalize得到概率值24.5/(0.18+164+24.5) =0.13
属于cat得分24.5,car:164,frog:0.18,那么属于cat的概率即为24.5/(0.18+164+24.5) =0.13,
属于car的概率为164/(0.18+164+24.5) =0.87
归一化公式就是:先x=3.2, e^x = 24.5, x=5.1, e^5.1 = 164,x=-1.7, e^(-1.7) = 0.18
然后24.5/(0.18+164+24.5) =0.13
第一步得到,计算各个得分映射e^sk,第二步,再求出某个得分的概率
通过对数函数计算损失值,概率越接近1说明判断越准确,对数函数越接近0,损失越小。
回归任务由得分值计算损失,分类任务由概率值计算损失
得到x,给一个w,就能计算损失,神经网络就是怎么样调整W,才能使损失变小,这就是一种优化。
hinge loss :损失函数
不管我们的模型如何设计,前向传播只需要一步步计算下去就可以得到一个结果,但这个结果不一定是我们想要的结果。正向传播得到Loss值,再把Loss值反向传播,并对神经网络的W参数进行更新。其中反向传播正是神经网络的要点所在。
反向传播
反向传播简单来讲就是一个链式求导,通过链式求导来确定参数进行调参(这里指参数而非超参数)来确定最佳的参数。上面我们讨论的是简单情况,在实际的模型中,我们一般可能会用到多层神经网络,但归根结底其实还是进行求导,理解了导数的定义也就理解了什么是反向传播。
反向传播例子
红色数据代表梯度,绿色代表输入数据
将x=1.37带入df/dx = -1/x^2 = -0.53,(x+1)' = 1, 由于链式求导两个偏导相乘
所以前一级梯度,-0.53*1 = -0.53.
神经网络结构
全连接指神经元之间全部连接,神经网络的作用就是提取特征。
输入层神经元的个数由样本决定,一个样本 x 由 d 个属性来描述,那输入层就有 d 个神经元。
输入层神经元与隐层神经元之间全互连
激活函数:非线性变换
解决过拟合:神经网络过于复杂,会导致过拟合
DROP-OUT解决过拟合,训练时杀死某些神经元,即神经元W参数不改变,减少复杂的,并且每次训练时是随机选取一部分神经元杀死,不是固定的。
参考博客: