机器学习之——神经网络学习

简介: 很久没更新博客了,这一次我们继续之前的机器学习的课程,这一节我们讨论机器学习里面重要的一个算法——神经网络(Nerual Network)的学习部分。 神经网络的代价函数 首先我们要引入一些标记,以便在后面讨论中使用: 我们回想一下,在逻辑回归(Logistic Regression)问题中,我们的代价函数(Cost Function)如下: 在逻辑回归中,我们只有一个输出

很久没更新博客了,这一次我们继续之前的机器学习的课程,这一节我们讨论机器学习里面重要的一个算法——神经网络(Nerual Network)的学习部分。

神经网络的代价函数

首先我们要引入一些标记,以便在后面讨论中使用:


我们回想一下,在逻辑回归(Logistic Regression)问题中,我们的代价函数(Cost Function)如下:


在逻辑回归中,我们只有一个输出变量,又称作标量(Scalar),也只有一个因变量y,但是在神经网络中,我们可以有很多输出变量,我们的hø(x)是一个维度为K的向量,并且我们训练集中的因变量也是同样维度的一个向量,因此我们的代价函数会比逻辑回归更加复杂一些,如下所示:


这个代价函数看起来复杂很多,但是背后的思想还是一样的。我们希望能够通过代价函数来观察算法预测的结果与真实情况的误差有多大,唯一不同的是,对于每一行特征,我们都会给出K个预测,基本上我们可以利用循环,对每一行特征都预测K个不同的结果,然后再利用循环在K个预测中选择可能性最大的一个,将其与y中的实际数据进行对比。

归一化的哪一项只是排除了每一层的ø0后,每一层的ø矩阵的和。最里层的循环 j 循环所有的行(由si +1层的激活单元书决定),循环 i 则循环所有的列,由该层(si 层)的激活单元数所决定。


反向传播算法(Backpropagation Algorithm)

之前我们在计算神经网络预测结果的时候,我们采用了一种正向传播方法,我们从第一层开始正向一层一层进行计算,直到最后一层的hø(x)。

现在,为了计算代价函数的偏导数:


我们需要采用一种反向传播算法,也就是首先计算最后一层的误差,然后再一层一层反向求出各层的误差,直到倒数第二层。

我们用一个例子来说明反向传播算法。

假设,我们的训练集只有一个实例(x(1), y(1)),我们的神经网络是一个四层的神经网络,其中:K=4,SL=4,L=4 


我们从最后一层的误差开始计算,误差是激活单元的预测()与实际值(yk)之间的误差(k=1:K)。我们用来表示误差,则:


我们利用这个误差值来计算前一层的误差:


其中g'(Z(3))是S形函数的导数,g'(Z(3))=a(3).*(1-a(3))。而则是权重导致的误差的和。

下一步是继续计算第二层的误差:


因为第一层是输入变量,不存在误差。我们有了所有的误差的表达式之后,便可以计算代价函数的偏导数了,假设λ=0,即我们不做任何归一化处理时有:


重要的是清楚地知道上面式子中上下标的含义:


如果我们考虑归一化处理,并且我们的训练集是一个特征矩阵而非向量。在上面的特殊情况中,我们需要计算每一层的误差单元来计算代价函数的偏导数。在更为一般的情况中,我们同样需要计算每一层的误差单元,但是我们需要为整个训练集计算误差单元,此时的误差单元也是一个矩阵,我们用来表示这个误差矩阵。第 l 层的第 i 个激活单元收到第 j 个参数影响而导致的误差。

我们的算法表示为:


即首先使用正向传播方法计算出每一层的激活单元,利用训练集的结果与神经网络预测的结果求出最后一层的误差,然后利用该误差运用反向传播法计算出直至第二层的所有误差。

在求出了之后,我们便可以计算代价函数的偏导数了,计算方法如下:


在Octave或者Matlab中,如果我们使用 fminuc 这样的优化算法求解求出权重矩阵,我们需要将矩阵首先展开为向量,再利用算法求出最优解后再重新转换回矩阵。

假设我们有三个权重矩阵,theta1,theta2和theta3,尺寸分别为10*11,10*11和1*11,下面的代码可以实现这样的转换:


这一次我们讨论到这里,下一回我们继续学习神经网络的梯度检验(Gradient Checking)随机初始化(Random Initialization)

相关文章
|
21小时前
|
机器学习/深度学习 监控 算法
LabVIEW使用机器学习分类模型探索基于技能课程的学习
LabVIEW使用机器学习分类模型探索基于技能课程的学习
|
1天前
|
机器学习/深度学习 人工智能 自然语言处理
【机器学习】什么是贝叶斯网络?
【5月更文挑战第10天】【机器学习】什么是贝叶斯网络?
|
1天前
|
机器学习/深度学习 存储 自然语言处理
【威胁情报挖掘-论文阅读】学习图表绘制 基于多实例学习的网络行为提取 SeqMask: Behavior Extraction Over Cyber Threat Intelligence
【威胁情报挖掘-论文阅读】学习图表绘制 基于多实例学习的网络行为提取 SeqMask: Behavior Extraction Over Cyber Threat Intelligence
6 0
|
11天前
|
机器学习/深度学习 分布式计算 物联网
【Python机器学习专栏】联邦学习:保护隐私的机器学习新趋势
【4月更文挑战第30天】联邦学习是保障数据隐私的分布式机器学习方法,允许设备在本地训练数据并仅共享模型,保护用户隐私。其优势包括数据隐私、分布式计算和模型泛化。应用于医疗、金融和物联网等领域,未来将发展更高效的数据隐私保护、提升可解释性和可靠性的,并与其他技术融合,为机器学习带来新机遇。
|
11天前
|
机器学习/深度学习 自然语言处理 搜索推荐
【Python机器学习专栏】迁移学习在机器学习中的应用
【4月更文挑战第30天】迁移学习是利用已有知识解决新问题的机器学习方法,尤其在数据稀缺或资源有限时展现优势。本文介绍了迁移学习的基本概念,包括源域和目标域,并探讨了其在图像识别、自然语言处理和推荐系统的应用。在Python中,可使用Keras或TensorFlow实现迁移学习,如示例所示,通过预训练的VGG16模型进行图像识别。迁移学习提高了学习效率和性能,随着技术发展,其应用前景广阔。
|
11天前
|
机器学习/深度学习 算法 前端开发
【Python机器学习专栏】集成学习中的Bagging与Boosting
【4月更文挑战第30天】本文介绍了集成学习中的两种主要策略:Bagging和Boosting。Bagging通过自助采样构建多个基学习器并以投票或平均法集成,降低模型方差,增强稳定性。在Python中可使用`BaggingClassifier`实现。而Boosting是串行学习,不断调整基学习器权重以优化拟合,适合弱学习器。Python中可利用`AdaBoostClassifier`等实现。示例代码展示了如何在实践中运用这两种方法。
|
11天前
|
机器学习/深度学习 PyTorch TensorFlow
【Python机器学习专栏】循环神经网络(RNN)与LSTM详解
【4月更文挑战第30天】本文探讨了处理序列数据的关键模型——循环神经网络(RNN)及其优化版长短期记忆网络(LSTM)。RNN利用循环结构处理序列依赖,但遭遇梯度消失/爆炸问题。LSTM通过门控机制解决了这一问题,有效捕捉长距离依赖。在Python中,可使用深度学习框架如PyTorch实现LSTM。示例代码展示了如何定义和初始化一个简单的LSTM网络结构,强调了RNN和LSTM在序列任务中的应用价值。
|
11天前
|
机器学习/深度学习 PyTorch TensorFlow
【Python机器学习专栏】卷积神经网络(CNN)的原理与应用
【4月更文挑战第30天】本文介绍了卷积神经网络(CNN)的基本原理和结构组成,包括卷积层、激活函数、池化层和全连接层。CNN在图像识别等领域表现出色,其层次结构能逐步提取特征。在Python中,可利用TensorFlow或PyTorch构建CNN模型,示例代码展示了使用TensorFlow Keras API创建简单CNN的过程。CNN作为强大深度学习模型,未来仍有广阔发展空间。
|
11天前
|
机器学习/深度学习 自然语言处理 语音技术
【Python 机器学习专栏】Python 深度学习入门:神经网络基础
【4月更文挑战第30天】本文介绍了Python在深度学习中应用于神经网络的基础知识,包括神经网络概念、基本结构、训练过程,以及Python中的深度学习库TensorFlow和PyTorch。通过示例展示了如何使用Python实现神经网络,并提及优化技巧如正则化和Dropout。最后,概述了神经网络在图像识别、语音识别和自然语言处理等领域的应用,并强调掌握这些知识对深度学习的重要性。随着技术进步,神经网络的应用将持续扩展,期待更多创新。
|
3天前
|
域名解析 网络协议 Linux
linux网络配置详解
linux网络配置详解
13 0

热门文章

最新文章