0-# 前言
2022年在导师的要求下开始学习Deep Learning,我选择在b站听吴恩达的课。随着第一门课——Neural Networks and Deep Learning的结束,曾经对我来说似乎晦涩而又神秘的神经网络一点一点揭开了它的面纱,并在需要拟合非线性曲线时展现了远远优于逻辑回归的强大能力。其中诸多细节我还没有彻底吃透,希望在完成这篇文章的过程中能够对如何构建一个完整的二分类神经网络模型有更加全面的理解。
一、什么是深度学习?
神经网络概述
神经网络通常包含三个部分:输入层,隐藏层,输出层。
-
输入层(Input layer)
通常是维度为[n_x,n]的向量。其中n_x表示特制的个数,n表示样本个数。 -
隐藏层(Hidden layer)
tip:编程实现时通常用list"layers_dims[l_1,l_2,…,l_n]"来描述神经网络的模型结构,len(layers_dims) 即为模型的深度,layers_dims[n]即为第n层隐藏层中包含的神经元个数。
可以将其类比为“黑盒子”,由许多个神经元堆叠在一起组成。在输入层输入训练样本后,通过不停地迭代计算完成参数的训练。单个神经元的计算可以简单地概括为下图,W^T为参数向量的转置,X为前一层的激活值A,B即bias,g(Z)为激活函数(此处为sigmod函数),A为这一层得到的激活值
-
输出层(Output layer)
负责输出预测值。
例如,在研究二分类问题时,通常选择sigmod函数作为输出层的激活函数。
深度学习相关问题概述
什么是深度学习?
目前我认为深度学习,就是有很多隐藏层的神经网络
深度学习已经存在了几十年,为什么开始突然流行了起来?
早期训练集样本规模较小时,深度神经网络和其他算法性能没有明显差距。随着大数据时代的到来,训练集数据的规模日益增长。当其数据规模增长到一定程度时,深度神经网络与其他算法的性能相比具有明显的优势。
深度学习与大脑
在没有学习深度学习之前,“神经网络”的字面意思带来的心理暗示以及在各种半吊子公众号推文的影响下,我先入为主地认为深层神经网络在训练参数的过程中“神经元”的运作方式与人类大脑学习时神经元的运作方式如出一辙。然而,这种想法是错误的。深层神经网络中的“神经元”通常情况下只做线性运算以及激活函数的运算,将前者的运作方式类比为后者其实是过度简化了后者的运作方式。因为,即使在今天,大脑神经元的研究专家依然无法说明大脑中的单个神经元究竟是如何工作的。诚然,人们在深度学习的各个领域中都曾受到过人类大脑的启发,但是简单得把深层神经网络类比为人类大脑中的神经是不可取的。
二、实现一个二分类的L层神经网络
接下来,基于Neural Networks and Deep Learning中分类“猫咪”的问题,建立一个二分类的L层神经网络。
在构建模型之前,普遍的做法是需要进行数据预处理,特征工程等等,包括特征的标准化……在这个问题中标准化的做法是对像素矩阵的每一个元素除以255。
然后,跟随以下基本步骤,建立模型。
-
初始化参数(W、b)/选择合适的超参数(学习率、迭代次数)
-
循环:
a.前向传播
b.计算成本
c.反向传播
d.更新参数 -
测试训练完成的模型
1.初始化参数/选择合适的超参数
初始化参数
不同于逻辑回归将参数W、b初始化为0的做法,在初始化神经网络的参数时,通常将W设为范围较小的
随机数。如果将参数都初始化为0,会使得在迭代完成后,所有隐藏层中的神经元都是相同的,这样的模型显然对与解决问题毫无建树。
选择合适的超参数
还没学捏QAQ
2.完成一次迭代所需做的操作
循环
a.前向传播
Z=W*X+b,A=g(Z)
X为前一层的激活值,g(X)为激活函数(通常是非线性函数,tanh(x)、σ(x)、Relu()),A为这一层最终得到的激活值
b.计算成本
c.反向传播
两年前听的我云里雾里,学完高数的链式求导法则发现原理十分简单
d.更新参数
3.测试模型
总结
神经网络的基础构建方法大概就是这些,主要难点是编程时实现向量化。
接下来就可以开始学习如何对模型进行优化,我已经迫不及待了