【吴恩达·机器学习】第四章:详解人工神经网络:推理和训练

在这里插入图片描述

  • 博主简介:努力学习的22级计算机科学与技术本科生一枚🌸
  • 博主主页: @Yaoyao2024
  • 每日一言🌼: 勇敢的人,不是不落泪的人,而是愿意含着泪继续奔跑的人。
    ——《朗读者》

在这里插入图片描述

0、声明

本系列博客文章是博主本人根据吴恩达老师2022年的机器学习课程所学而写,主要包括老师的核心讲义和自己的理解。在上完课后对课程内容进行回顾和整合,从而加深自己对知识的理解,也方便自己以及后续的同学们复习和回顾。

由于课程使用英文授课,所以博客中的表达也会用到英文,会用到中文辅助理解。

🌸Machine learning specialization课程共分为三部分

  • 第一部分:Supervised Machine Learning: Regression and Classification
  • 第二部分:Advanced Learning Algorithms(Neural networks、Decision Trees)
  • 第三部分:Unsupervised Learning: Recommenders, Reinforcement Learning

💐最后,感谢吴恩达老师Andrew Ng的无私奉献,和视频搬运同学以及课程资料整合同学的无私付出。Cheers!🍻

前言

在这里插入图片描述
 在前面几章,我们学习了一些传统的机器学习算法:线性回归和逻辑回归。接下来我们将学习更高级更有效的的机器学习算法:神经网络(Neural Networks; 深度学习,deep learning)、决策树(Decision Trees)。这一章主要介绍卷积神经网络,从它的起源、发展、原理、预测和训练等方面进行讲解。也是一个简单的介绍,对神经网络这种算法有初步的认识和较为全面的理解。因为我们知道,深度学习是机器学习的一个大分支,里面的学问还有很多。

💁🏻‍♀️接下来让我们开始吧!💐🚂🚂🚂

一、神经网络的起源与发展

1.1.神经元和大脑

 神经网络最初是设计用来 模仿人类大脑进行工作的一种算法(Origins: Algorithms that try to mimic the brain)。这是它形成的起源。

 我们在下图中可以看到,人脑中的神经元通过接收多个输入的神经信号,在神经元内进行“计算”后,并用突触进行释放神经信号,将神经信号传递给下一个神经元;下一个神经元将接受的神经信号作为输入信号,并以相同的方式进行进行传递给其他神经元。人脑中的思想就是这样通过神经元与神经元之间的连接和输送神经信号形成的,
在这里插入图片描述
 当时人们就是按照神经元和大脑中神经信号的传递的这种理解,设计出如下的神经网络。

在这里插入图片描述
可以看到,人工设计的神经网络,实际上对神经元是十分简化后的一个数学模型。它们都有输入和输出,并且神经元和神经元之间进行联系和信号的计算与传递。

1.2: Why now?

神经网络这种想法的提出很早,但是真正开始应用是2005年之后。为什么呢?

在这里插入图片描述
主要有两个原因

  • 数据:随着手机等电子设备和互联网的兴起,数据量急剧增大。面对大数据,传统的机器学习算法的性能并不理想。
  • 硬件:随着硬件水平的提高,计算能力增强,大的神经网络可以实现。

1.3:对神经网络的理解

神经网络起源的是想模仿人类大脑的工作原理,但是实际上现在的神经网络和人类大脑并没有很大关系!!!(人类对大脑具体是如何进行运作的原理目前也没有完全弄懂)。和传统算法一样,它的本质还是一个数学模型

人工神经网络之所以有效,主要有以下几个原因:

  • 通用逼近定理:这个定理表明,一个具有足够大数量的神经元的神经网络,可以逼近任何复杂的函数。这意味着只要我们有足够的神经元和合适的权重,我们的网络就可以理论上模拟出任何复杂的情况。
  • 分层的知识抽象:在深层神经网络中,每个层次的神经元可以学到数据的一种抽象,从而识别出相当复杂的模式。这些层从输入数据中提取特征,并将这些特征传递给下一层以进行更复杂的分析。这一层级结构可以捕获数据中的复杂性和多样性。
  • 数据驱动:神经网络是从数据中学习的,这意味着它们可以自动适应新的输入并在不断的学习中改进。与需要明确编程规则的传统算法相比,神经网络可以通过训练从大规模数据中学习规则。

B站的UP主王木头也对机器学习的理论基础进行了详细的讲解:如果大数定律失效,机器学习还能学吗?幂律分布可以告诉你答案。说白了,只要数据量够大,模型够复杂,总能“暴力出奇迹”。

所以为什么行呢?说白了还是因为有数学理论做基础

之前听到一个很有意思的看法是。人类最初造飞机,是为了模仿鸟类的飞行,尽管现在的飞机的飞行的方式和鸟类的飞行方式并不相同,但不妨碍飞机可以飞行,且飞的比鸟类还要好。机器学习感觉也是如此。尽管初衷是想模拟人类大脑的运作方式进行预测,但是最终设计的神经网络这种数学模型也可以达到很好的效果。所以,也许我们没有必要像生物神经方面的科学家一样把人脑的运作方式了解的清清楚楚才能实现像人一样进行思考和预测


2024/5/14日补充

最近看到和听到的,又对现在的机器学习算法和目前普遍应用最多的连接主义下且基于统计定律的神经网络、深度学习,又有了新的看法。
具体可以看看:人工智能是不是走错了方向?

看到一个很有道理的评论:

AI确实原本就是指模仿人类方式思考,深度学习呢(人工神经网络),也是受到了人脑的结构的启发(当然,也只是启发,真正的人脑当然不可能像上面那么简单)所做出来的一个尝试,而刚好这些尝试比较成功,再加上上面所讲的当时恰逢硬件能支撑的起来,还有“神经元”这样高大上的名字(噱头),所以就被观赏人工神经网络这样引起大众关注的头衔,资本也更愿意投入(没错,资本,科技的发展向前推动基本上都是资本啊!!!)。

其实呢,像CNN这样的网络本质上,还是一个可以用严格数学公式来表示,就是一个数学模型

However,世界的本质就是数学模型吗???人脑里面就是在跑一些复杂的模型,从而运作的吗???

有可能是,有可能不是,毕竟上面也说了,人类现在对大脑并没有完全弄懂。

对于人工智能努力的方向呢?反正明白一点,现在的人工智能本质上还是数学公式,属性模型,是不可能产生所谓的意识的。

但是说到让机器具有意识这件事,有必要吗???我目前是认为没有的,这件事有待商榷,不过无论如何,就目前努力方向来看,是没有的。

像李飞飞所说,人工智能的发展目前还存在于前牛顿时期,但是,未来一定会有那个牛顿吗?以及爱因斯坦吗?在人工智能领域也提出那样美妙的定律。很难说。

但至少我,会愿意尽力成为这条历史的推动者…我始终认为,人内心的力量和创造性是很强大的,只不过受社会束缚和压抑,也许有那么一两个人跳脱出来,说不定,下一个牛顿和爱因斯坦,就在你我之中…

1.4:工作原理浅析

下面展示的是,其实一个单变量的逻辑回归模型,就可以看作是一个单输入的神经元。那么在这里,Sigmoid函数就不再称为逻辑函数,而是称为激活函数

激活函数在神经网络中起到一个“门控”制的作用,它们决定了某个神经元是否应该被激活(我个人觉得可以理解为神经元得到数据后,通过激活函数对数据处理,模拟了人脑中神经元处理数据的过程)。这意味着它们可用于创建和控制复杂的非线性关系。

在这里插入图片描述
我们再看看一个普通的神经网络的结构如下:

  • 输入层:输入的原始数据
  • 隐藏层:有多个神经元组成,对原始数据进行计算、激活和传递(可以有多层)
  • 输出层:输出目标值

🙎🏻‍♀️在下面这个例子中,对原始数据特征进行对应的逻辑回归运算,得到affordabilityawarenessperceived3个高层次的抽象特征。
在这里插入图片描述

上述的过程与第二章中在多变量线性回归模型中学习到的特征工程的十分类似。如下图,都是对原有的特征进行组合计算得到新的特征。但是实际还是有区别的,我们在下面详解。
在这里插入图片描述
当我们只看右侧一部分的时候,其实就是一个普通的三输入逻辑回归:
在这里插入图片描述

1.5:神经网络vs传统机器学习

上面整个结构感觉很简单,因为拆开来看,与我们前面学习到的特征工程、逻辑回归基本差不多。

但是我们再把注意力集中到隐藏层

  • 隐藏层可以访问前一层所有神经元的输出值
  • 隐藏层每一个神经元代表的特征是通过训练神经网络自己学习得到的,而不是像传统的机器学习算法中的特征工程一样人工对原有基础特征进行组合。
    在这里插入图片描述

第二点就是神经网络之所以比传统机器算法更为强大的原因,因为它可以自己学习特征,并对特征进行抽象。隐藏层使得神经网络模型具有强大的学习和表达能力,是神经网络成功的关键。

例如在前面的博客中介绍的卷积神经网络(【计算机视觉】万字长文详解:卷积神经网络),其前几层隐藏层会学习到一些基础的特征(如线条、曲线),后几层学习一些更为抽象和高级的特征(眼睛、耳朵、鼻子)。而输出层对这些神经网络自己学习到的高级特征进行逻辑回归,从而完成整个模型预测的任务。 整个过程中,隐藏层的特征(参数w和b)都是神经网络通过训练自己学习得到的,而非手工设计的。这是神经网络之所以强大以及区别于传统机器学习算法的方面!

🪧Tips: 当然,学习只能学习到参数,什么是参数?你可以在2.1小节中看到,和逻辑回归一样。至于模型有多少个神经元、多少层,这是属于模型架构的问题,由人工确定。

在这里插入图片描述
接下来,让我们更为具体从神经网络的预测和训练两个方面,深入学习神经网络。

二、神经网络的推理

2.1:神经网络的层的计算

上面只是对神经网络进行了一个直觉上的介绍和讲解,那么网络中每个神经元在进行着具体的运算是什么呢?我们下面来看看。

最基本的神经网络只有一层隐藏层。接下来我们看看只有一层隐藏层的神经网络是如何工作的,当弄清楚一层隐藏层的神经网络是如何工作时,更复杂的隐藏层不过大同小异了,因为更复杂的神经网络不过是这些层的组合和构建。

下图所示。从左往右看,对于第一层(layer 1):每一个神经元都是一个对前一层输出量 x (向量)的逻辑回归(逻辑函数)。每一个神经元进行相应逻辑回归的计算后得到输出值 a (向量),并将其传递给下一层。

💁🏻‍♀️这里我们可以看到,下标用来表示这一层的第几个神经元,右上标表示当前属于第几层。

在这里插入图片描述
最后一层,同样进行类似的运算。
在这里插入图片描述
通常,根据输出层的结果,可以决定输出的形式。(如下)
在这里插入图片描述

最后,我们将计算推广到具有多层隐藏层的神经网络:
在这里插入图片描述

2.2:向前传播(forward propogation)

向前传播,其实说白了就是当模型训练好之后(参数确定了),给定数据从输入层,通过计算,从左向右流出输入层,后一层的输入是前一层的输出,一层一层进行计算,最后得到预测结果。这个过程就是数据的向前传播。下面以手写数字的识别为例,进行向前传播的讲解。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、线性代数

3.1:神经网络为何高效

简而言之,因为神经网络计算过程可以矢量化,将数据进行矢量化后,进行矩阵运算,可以更高效的得到运算结果。背后的核心还是GPU等硬件进行并行运算从而加速,这在之前章节中也讲到过。
在这里插入图片描述

3.2:矩阵乘法

在这里插入图片描述

3.3:代码实现

在这里插入图片描述

四、模型的训练

🪧这一块,我们的模型训练的框架的是TensorFlow

4.1:TensorFlow的实现

我们可以看到,使用TensorFlow训练模型主要有以下3个步骤

  • 首先,确定模型架构(有几层、每层有多少个神经元)、激活函数——Create the model
  • 编译模型,并且指定损失函数
  • 输入数据,给定梯度下降次数(epoch)
    在这里插入图片描述
    如下图,这和之前讲到的逻辑回归模型的训练步骤完全一致,它们都是监督学习算法。
    在这里插入图片描述

4.2:激活函数

4.2.1: 其他激活函数

总的来说,激活函数有以下4个(后3个均 为非线性

  • g(z) = z:线性激活函数;和也没有使用没区别
  • g(z) = sigmoid(z):sigmoid激活函数
  • g(z) = ReLU(z) = max(0, z):ReLU激活函数
  • g(z) = softmax(z):多分类问题中的softmax激活函数
    在这里插入图片描述

4.2.2:激活函数的选择

  • 一、输出层(Output layer)的激活函数:取决于你想预测的y是什么

    1. 二分类问题(Binary Classification):Sigmoid函数
    2. 线性回归问题(Linear Regression)且预测值有正有负:线性激活函数
    3. 回归问题且预测值只能为正:ReLU函数
    4. 多分类问题:softmax激活函数
      在这里插入图片描述
  • 二、隐藏层(Hidden layer):一般使用ReLU激活函数(更快、性质使然)
    在这里插入图片描述

4.2.3:为什么使用激活函数

这个问题一般是针对隐藏层;对于输出层,因为结果形式的需求,暂且不讨论。

  • 在隐藏层使用激活函数的目的,最主要还是为了 引入非线性元素,即增加模型的复杂性,这对于多层神经网络是必须的,否则的话就是普通的传统回归模型。
  • 梯度提供了优化的方向:激活函数的选择也是基于梯度的原因。例如,激活函数ReLU在负值区域内的梯度为零,可以让某些神经元的输出为0,这使模型成为非完全线性模型,有利于模型在训练过程中的稀疏表示。此外,ReLU和其他非饱和性的激活函数的背后基础是梯度下降法,梯度下降法是一种优化策略,它需要梯度信息来更新参数,以此最小化损失函数。

4.3:多分类问题(Multiclass classfication)

4.3.1:多分类问题的定义

其实和二分类问题(使用逻辑回归模型)类似,多分类问题的核心目的也就是预测每个类别的概率。多分类问题采用的softmax回归算法(softmax regression alogorithm)也是逻辑回归算法的推广!
在这里插入图片描述

4.3.2:softmax回归算法

softmax的本质是逻辑回归算法的推广:
在这里插入图片描述
损失函数的对比:
在这里插入图片描述

4.3.3:神经网络的softmax输出

下图可以看到,softmax函数作用于输出层,以作为激活函数时,和其他激活函数不同的是:当前神经元的值不仅取决于前一层的输出值,还取决于当前这一层其他神经元的计算值。
在这里插入图片描述

4.4:反向传播(back propogation)——求导

4.4.1:计算图

计算图(computing graph)的定义:把向前传播和反向传播求导的过程以类似于流程图的形式展示出来。

如下图所示,向前传播(从左往右),从而计算代价函数J:
在这里插入图片描述
计算到代价函数后,反向传播(从右往左),计算Jw的导数:(很简单,其实就是链式求导法则)
在这里插入图片描述

4.4.2:大神经网络中的反向传播

就是计算出代价函数后,从右往左进行链式求导:
在这里插入图片描述

4.5:Adam算法:比梯度下降更好

在前几章介绍梯度下降算法来训练模型时,我们知道 学习率α 的确定是值得尝试的, 不能太大,否则震荡而难以收敛;不能太小,否则达到收敛时间过长。

在前面用到的梯度下降算法中, 学习率α全局的、确定的、所有参数共享的

也没有一种算法,能够在梯度下降较慢(参数更新的步伐较小)时,自动增大α;且在梯度来回震荡无法收敛时,自动减小α呢?Adam算法就是这样一个能自动调节学习率α的优化算法。

在Adam算法中,每个参数都有自己的学习率:
在这里插入图片描述
关于Adam算法背后具体如何实现的,不在这里讨论;感兴趣的同学可以自行搜索。

它的主要思想就是如下:自动调节学习率α在这里插入图片描述

4.6:其他网络层类型介绍

前面讲的神经网络中的网络层,都是全连接层Dense layer即每个神经元的输出都是由前一层所有神经元的输出计算和激活得来:

在这里插入图片描述

4.6.1:卷积层

对于“卷积层”,你可以设计单个神经元可以查看前一层的输出的窗口有多大,以及每层有多少个神经元:

卷积的本质是:加窗傅里叶变换

在这里插入图片描述

卷积有一维卷积和二维:
在这里插入图片描述
二维我们卷积我们熟知,用于卷积神经网络,应用于计算机视觉领域(捕捉局部特征而非全局):

在这里插入图片描述

在卷积神经网络那篇博客中我们也讲到为什么不用全连接神经网络,因为计算量和参赛量太大!

  • 36
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是瑶瑶子啦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值