内容纲要

欢迎转载,作者:Ling,注明出处:深度学习:原理简明教程03-神经网络基础

 

神经网络分浅层神经网络与深度学习网络,但是都属于神经网络这个大类别。我们首先会通过一些例子,引入神经网络的各种概念:神经网络基本组成,前向传播,反向传播,BP算法

 

引入

可以从感知机说起,关于感知机可以参考:机器学习:原理简明教程02-感知机

感知机通过寻找:到误分类点cost最小的分割平面的办法,得到最优分割平面,求得w和b

接下来你会发现,其实和神经网络求w和b很类似,实际上单层感知机是最简单的一种神经网络

 

实例:房价预测

如下图,一条Relu分割线,假设其可以很好地拟合房屋大小和房价的关系,它其实也是一种最简单的神经网络

dl_03_001

换一种画法:这种画法更像神经网络,和上面其实等价

dl_03_002

你可以看到神经网络

组成:神经元,输入x,输出y,链接线

功能:输入x,通过神经元处理(就是你要训练得到的拟合分割线),得到输出y,也就是预测的房价

为啥叫神经网络:因为很像人大脑中的神经网络,所以这种机器学习方法也称神经网络

 

更复杂的例子:房价可能由多个指标(俗称特征)决定

如下图所示:

dl_03_003

输入:房屋大小,房间数目,地区代码,当地财富情况

虽然是由这四个特征决定,但是其中某些特征可能决定了一些隐含特征,从而最终决定的房价

隐含层:房屋大小和房屋数目决定家庭大小,地区代码决定出行难易,当地财富决定学校质量

输出层:最终决定了最后价格

 

将该图抽象标准神经网络结构

如图:

dl_03_004

输入:x1,x2,x3,x4

隐含层:一层隐含层,节点数3个

输出层与输出结果:y

 

以上就是最简单的神经网络

 

下面我们再结合一个具体例子来看,神经网络如何通过学习参数,得到模型,处理图片二分类

如图:

dl_03_005

输入

图片转换成特征向量:

每个像素点都是一个数,三个channel,展开成一维向量:

dl_03_006

共64*64*3=12288个特征

n=nx=12288

形式化约定

dl_03_007

模型

结构:就经过一个逻辑回归

dl_03_008

参考:机器学习:原理简明教程06-逻辑斯谛回归与最大熵模型

如果不清楚没关系,我这里再介绍一下主要内容,方便和后面内容衔接

逻辑回归:sigmod

dl_03_009
 

整个简单的神经网络就是输入x,然后经过w,b处理,然后再经过一个sigmod,如果大于0.5则认为结果为1,小于0.5认为结果为0,得到了y^,这样就就可以进行二分类。

 

如果我们任意给定一组w和b,我们总可以得到y^是0,或者1,这样应该如何调整w和b,使得其得到的y^接近真实的y呢?

即如果给定很多(x,y)实例,如何得到w和b?

任何一个机器学习算法都需要确定一个Objective函数,或者说cost函数。

cost函数准则:如果预测结果和真实结果越接近,cost越小,预测结果和真实结果越不同,cost越大,以此衡量你得到w和b的好坏,从而最终得到w和b。

如何选择cost函数呢?

最小二乘法 vs log法

dl_03_010

它们都可以反应cost函数准则:

1)最小二乘法,如果y^和y相差大,cost越大

2)log法:如果y=1,其实只有前面式子,如果y^为0,cost越大,y^为1,cost为0,如果y=0,其实只有后面式子,如果y^为0,cost为0,如果y^接近1,cost很大

由于log更好计算,且是凸函数,选择后者。

 

有了cost函数,我们就可以改变w和b,然后看改变w和b,会导致cost变大还是变小,我们目标是让cost变小。

如何让cost变小?

通过梯度下降法可以迭代求得比较优的w和b,使得cost比较小。

 

为什么通过梯度下降法可以求得比较优的w和b?

解释:对于下凸函数,我们的log函数就是下凸函数,沿梯度方向,更改w和b,可以让cost不断减小,当到达低谷时候,就是最优解了。

dl_03_011

画出J cost和w与b关系图,我们知道,沿红线不断走,调整w和b值,可以降低J,到达低谷可以让cost最小

 

什么是梯度方向?

解释:实际上就是导数或者偏导数,也就是红线方向。

图中是两个变量,我们看一个变量的例子

dl_03_012

最优J在底谷,我们只要反复让w减去学习率乘以梯度,就可以让J达到底谷。

 

为啥梯度可以有这种效果?

对于J=3w,其中3你可以认为是输入值,固定为3,我们要变动w(要学的参数),看看对J这个cost产生多少影响

梯度为3:

dl_03_013

原来w=1,y=3

w变化0.001,即w=1.001,y要变化0.003,y=3.003

 

对于J=3w2

梯度为6w

dl_03_014

如果w=1,y=3

w变化0.001,即w=1.001,在w=1处,y要变化0.006, y=3.006003

 

三点结论:

1)梯度可能在每个不同w处,结果不一样

2)梯度大小决定了,w变化多少影响y变化多少

3)梯度方向可以让w的变化,最大影响y变化

 

对应到神经网络参数优化问题:我们知道y和y^有误差,我们要可以调整w来减小这个误差,所以可以通过梯度*α改变来调整,这就是为什么通过梯度下降,让cost变小的原因。

一个简单的神经网络,通过梯度下降可以改变w和b值,从而让J(cost)更小,从而学得最后的w和b,之后输入一个x,就可以通过w和b得到预测的y,这就是神经网络!!!

 

下面更加形式化地说明什么是神经网络

计算图

公式

dl_03_015

隐含变量

dl_03_016

画成图

dl_03_017

如图所示:J或者说cost最后的计算,是通过abc组合以及中间一些组合最后得到,这就是计算图。

神经网络其实就是类似一个计算图。

前向计算:通过计算图可以进行前向传播,forward计算结果

dl_03_018

反向计算:可以通过反向计算各个偏导值(之后讲反向传播会用到),链式偏导

dl_03_019

通过计算图,我们可以正向求cost,反向计算梯度,有了这个武器,我们来看看它如何处理逻辑回归对应的神经网络。

 

逻辑回归对应的神经网络

公式

dl_03_020

网络

dl_03_021

图中w1,w2,b都是参数,模型要学习的

x1,x2是输入的一个实例的两个特征

通过前向:我们可以得到L,cost值

通过反向:我们可以求每个参数的梯度,通过梯度下降法,是的L变小,求得最优参数值

每个参数梯度求法

dl_03_022

通过梯度下降,求得最优参数值

dl_03_023

前面是针对一个实例的两个特征,现在应用多个实例

公式

dl_03_024

梯度计算

dl_03_025

BP算法:

dl_03_026

其中dz是预测值和标准值差,所以叫误差反向传播算法。

 

好了,计算参数的方法讲完了,下面看看如何提高效率。在早期的机器学习软件中,比如weka,都是通过for循环计算每个特征相应的值,这样计算太慢,如果利用向量,同时计算所有特征值,更新所有参数,速度可以大大提高,很多很多倍….向量化,可以去掉for循环。

 

上面其实有两个for循环,我们通过向量去掉:

dl_03_027

最后向量版本的算法

dl_03_028