(1-1)神经网络与深度学习 | 神经网络基础

目录

什么是神经网络?

用神经网络进行监督学习

应用举例

结构化数据与非结构化数据

逻辑回归算法

logistic回归模型

logistic回归损失函数

梯度下降法

计算图

logistic回归中的梯度下降法

向量化logistic回归

前向传播

反向传播


什么是神经网络?

以房价预测为例,首先训练集有4个输入特征,包括面积、卧室数量、地区邮编以及地区富裕程度。此时输入层有4个特征,输出层为房价,隐藏层设置3个隐藏单元(可变),神经网络结构如下:

已知这些输入的特征,神经网络的工作就是预测对应的价格。注意各层之间的单元采用全联接的方式,神经网络的强大之处在于它能在标记训练集上,得到清晰的输入和输出之间的映射关系。

用神经网络进行监督学习

应用举例

神经网络在监督学习上的应用
输入(x) 输出(y) 应用
房屋特征 房价 房地产
广告、用户信息 用户是否会点击该广告(0/1) 在线广告
图片 指数(1,...,1000) 图片标记
音频片段 文本 语言识别
英语 中文 机器翻译
图片、雷达信息 其它车的位置 无人驾驶

针对不同的应用会使用不同的神经网络结构,如房价预测和在线广告使用标准的神经网络(全联接网络);图像领域经常应用CNN(卷积神经网络);对于语言(单词序列)和音频(时间序列)这种序列数据一般使用RNN(循环神经网络);而对于无人驾驶这种复杂的应用,一般使用混合神经网络结构。

结构化数据与非结构化数据

  • 结构化数据:输入特征有非常清晰明确的定义,如房价预测(房子的面积和卧室数量等特征定义明确)和广告点击预测
  • 非结构化数据:输入特征没有明确的定义,如音频、图像和文本

逻辑回归算法

logistic回归模型

以判断一幅图像是否是关于猫的图像为例:在计算机中用3个独立的矩阵来存储一张彩色图,分别对应红、绿、蓝三个颜色通道。每个矩阵和图像同样大,比如若图像是64*64像素,那么每个矩阵的维度就是64*64的。矩阵中的值代表对应像素点该颜色通道上的亮度值(0-255)。

  • 输入的特征变量:矩阵中亮度值的堆叠,特征向量x的维度n_{x} = 64*64*3 = 12288
  • 输出标签:y = 0,1  (2分类,0代表不是,1代表是猫)

           

  • 训练集:{{(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),...,(x^{(m)},y^{(m)})}},m代表训练集的大小m_{train}(区分于测试集的大小m_{test}
  • 特征矩阵X:包含每一个样本的特征向量,其中X每一列代表一个样本的特征向量
  • 标签矩阵Y:包含每一个样本的标签

        

使用逻辑回归算法对图像进行2分类,可以表述为:

其中,算法输入是图像的特征向量;算法输出是预测输入属于正类的概率,它是由对输入特征进行线性组合再通过sigmoid函数得到的。通过sigmoid函数\sigma (z) = 1 / (1 + e^{-z})可以把组合值映射到0-1之间。算法参数包括两部分权重参数w \in R^{n_{x}},偏置参数b \in R,。

logistic回归损失函数

为了训练得到一组最优的参数w和b,需定义一个代价函数:

算法的输出为:,其中x^{(i)}代表第i个训练样本的特征向量。

  • 损失函数:均方误差定义的损失函数是一个非凸函数,存在很多局部最优值,利用梯度下降法很难得到全局最优值,所以在logistic回归中使用第二个损失函数,这个损失函数为凸函数。

  • 代价函数:用于描述整个训练集所有样本损失函数的均值

梯度下降法

通过梯度下降法最小化代价函数,求得一组最优的参数w和b:

梯度下降的迭代过程:让参数w每次减去代价函数对w的导数值与学习率\alpha的乘积,从而最小化代价函数,更新模型参数,最后得到一个最优的参数值;对偏置参数b的更新也是如此。当代价函数有多个参数时,应该使用偏导数。

计算图

神经网络的计算包括前向传播得到输出和反向传播计算梯度更新参数两部分。

  • 用计算图来表示简单前向传播,假设代价函数为J(a,b,c)=3(a+bc)

  • 用计算图来计算简单的导数:计算\frac{\partial finalOutput}{\partial var}, finalOutput指的是代价函数J,var指的是中间变量. 在Python中一般把\frac{\partial finalOutput}{\partial var}记做d var。用计算图计算导数其实就是链式求导过程。

logistic回归中的梯度下降法

考虑单个样本的损失函数,假设输入特征向量x只有两个特征x_1,x_2

logistic回归的计算图:

单个样本一次梯度下降计算过程:

  • w_{1} = w_{1} - \alpha dw_{1} = w_{1} - \alpha x_{1}dz
  • w_{2} = w_{2} - \alpha dw_{2} = w_{1} - \alpha x_{2}dz
  • b = b - \alpha db = b - \alpha dz

m个样本的梯度下降:

向量化logistic回归

向量化指的是消除代码中显式for循环,加快运行速度的技巧。python中Numpy的内置的函数,不仅可以去掉显式for循环,还可以充分实现并行化。不论是基于CPU还是GPU都可以实现并行化,GPU更加擅长并行化。

前向传播

  z^{(i)}=w^{T}x^{(i)}+b,a^{(i)}=\sigma (z^{(i)}) ,i=1,...,m

Z=np.dot(W.T,X)+b
A=sigmoid(Z)

其中,Z=[z^{(1)},...,z^{(m)}],A=[a^{(1)},...,a^{(m)}],特征矩阵X(n_{x}*m)包含m个样本的特征向量,每一列代表一个样本的特征向量。

反向传播

  • dz^{(i)}=a^{(i)}-y^{(i)},i=1,...,m    Y=[y^{(1)},...,y^{(m)}],A=[a^{(1)},...,a^{(m)}]  ,dZ=[dz^{(1)},...,dz^{(m)}] 
  • dw_{j}+=x_{j}^{(i)}*dz^{(i)} ;i=1,..,m;j=1,...,n_{x} ;dw_{j}/=m
  • db+=dz^{(i)};i=1,...,m; db/=m
dZ=A-Y
dW=np.dot(X,dZ.T) / m
db=np.sum(dZ) / m

完整的向量化逻辑回归

for iter in range(1000):  #1000次迭代
    Z=np.dot(w.T,X)+b     #前向传播
    A=sigmoid(Z)
    dZ=A-Y                #反向传播
    dW=np.dot(X,dZ.T)/m
    db=np.mean(dZ)
    w=w-alpha*dW
    b=b-alpha*db

猜你喜欢

转载自blog.csdn.net/Nibaby9/article/details/104678553