当前位置: 首页 > article >正文

机器学习入门-读书摘要

先看了《深度学习入门:基于python的理论和实践》这本电子书,早上因为入迷还坐过站了。。

因为里面的反向传播和链式法则特别难懂,又网上搜了相关内容进行进一步理解,参考的以下文章(个人认为都讲的都非常好):
https://zhuanlan.zhihu.com/p/65472471
https://zhuanlan.zhihu.com/p/635438713
https://zhuanlan.zhihu.com/p/790621956
https://zhuanlan.zhihu.com/p/66534632

机器学习的问题大体上可以分为回归问题和分类问题
关于输出层的激活函数,回归问题使用恒等函数;分类问题一般使用softmax函数(概率函数)

学习指的是从训练数据中自动获取最优权重参数的过程。引入损失函数衡量调整的指标,学习的目的找出使得损失函数的值达到最小的权重参数。

1 forward 正向传播,由输入到输出的过程 ---推理处理
backward 反向传播,由输出到输入的过程 ---机器学习
2 激活函数
线性函数 可以表示为cx,c为常量,x为输入,也就是可以用一条直线标识,不适用于神经网络
非线性函数
阶跃函数  感知机使用的,大于某个值,输出是另一个值
神经网络使用平滑变化的sigmoid或ReLU函数
softmax函数   概率函数,所有输出加起来是1

机器学习中一般将数据分为训练数据(也可以成为监督数据)和测试数据分别进行学习和实验(评价得到的模型的实际能力,损失函数)。

学习数据:
MINIST数据集  ---手写数字图像集(0到9,图形是28像素*28的),经常作为实现数据出现;比如训练图片6w张,测试图片1w张
正规化--将数据限定再一定范围,比如0-1

图像的特征量通常表示为向量的形式。在计算机视觉领域,常用的特征量包括SIFT、SURF和HOG等。
使用这些特征量将图像数据转换为向量,然后对转换后的向量使用机器学习中的SVM、KNN等分类器进行学习。

泛化能力  评价学习能力,能否将训练模型应用于未来的数据预测。
过度拟合问题:指模型在训练数据上表现优异,但在测试数据或新数据上表现不佳的现象。原因:
(1)模型复杂度过高:捕捉到了训练数据中的一些特定的局部的特点(噪声)
(2)训练数据不足

        神经网络学习用的指标成为损失函数,可以是任何函数,一般用均方差(mean squared error)等。
        机器学习使用训练数据学习,严格来说,就是针对训练数据计算损失函数的值,找出使得该值最小的参数。

导数、偏导数、梯度
导数就是计算某个瞬间的变化量。
为了寻找使损失函数最小的参数,需要计算该参数的导数(确切的说就是梯度?),然后以这个导数为指引,逐步更新参数值。
损失函数其实是对权重参数求偏导数(因为神经元有多个参数,对某个参数求的是偏导数)。

像这样的由全部变量的偏导数汇总而成的向量称为梯度(gradient)。这个梯度意味着什么?可以用图像直观表示。
梯度呈现为有向向量(箭头)。我们发现梯度指向函数的“最低处”(最小值),就像指南针一样,所有的箭头都指向同一点。其次,
我们发现离“最低处”越远,箭头越大。梯度指示的方向是各点处的函数值减少最多的地方,无法保证梯度所指的方向就是函数的最小值或者真正应该前进的方向。
虽然梯度的方向并不一定指向最小值,但沿着它的方向能够最大限度地减小函数的值。因此,
在寻找函数的最小值(或者尽可能小的值)的位置的任务中,要以梯度的信息为线索,决定前进的方向。
梯度法:位置沿着梯度方向前进一定距离,然后在新的地方重新求梯度,再沿着新梯度方向前进,如此反复,不断地沿梯度方向前进。
像这样,通过不断地沿梯度方向前进,逐渐减小函数值的过程就是梯度法(gradient method)。梯度法是解决机器学习中最优化问题的常用方法,特别是在神经网络的学习中经常被使用。
梯度下降法和梯度上升法本质上是一样的,将损失函数加个负号即可。

神经网络的学习分成下面4个步骤。
步骤1(mini-batch)
从训练数据中随机选出一部分数据,这部分数据称为mini-batch。我们的目标是减小mini-batch的损失函数的值。
步骤2(计算梯度)
为了减小mini-batch的损失函数的值,需要求出各个权重参数的梯度。梯度表示损失函数的值减小最多的方向。
步骤3(更新参数)
将权重参数沿梯度方向进行微小更新。
步骤4(重复)
重复步骤1、步骤2、步骤3。
神经网络的学习按照上面4个步骤进行。这个方法通过梯度下降法更新参数,不过因为这里使用的数据是随机选择的mini batch数据,所以又称为随机梯度下降法(stochastic gradient descent)。
在很多神经网络,随机梯度下降法一般由一个名为SGD的函数来实现,也就是随机梯度下降的首写字母。

数值微分,可以计算权重的梯度,但还有一种更高效的计算梯度的方法,但实现较复杂,误差反向传播法计算梯度效率比较高,它利用链式法则计算
反向传播是基于链式法则的。
如果一个函数由复合函数表示,则该复合函数的导数就是各个函数的导数的乘积表示。
比如 z = t*t  t=x+y  则z对x的导数可以用z对t导数 * t对x导数。
反向传播的理解====有点儿难度。。。可能我脑子不好使了
链式法则(Chain Rule)是微积分中的重要规则,用于计算复合函数的导数。在神经网络的反向传播算法中,链式法则是计算梯度的核心工具。它允许我们通过将复杂的神经网络分解为简单的函数来逐层计算梯度,从而优化网络的权重。


 


http://www.kler.cn/a/546245.html

相关文章:

  • Webpack和Vite插件的开发与使用
  • 二、OpenSM排障----实战生产
  • ADC入门准备(十):信号与系统知识回顾
  • Linux Mem -- Where the mte store and check in the real hardware platform
  • 如何下载AndroidStudio的依赖的 jar,arr文件到本地
  • JVM类加载和垃圾回收(详细)
  • 【RAG落地利器】Weaviate、Milvus、Qdrant 和 Chroma 向量数据库对比
  • 群体智能优化:粒子群算法(PSO)详解与实战
  • 如何在微信小程序中添加动画效果
  • Python爬虫实战:利用代理IP获取招聘网站信息
  • Vue 2 路由指南:从基础到高级
  • 机器学习 - 线性模型
  • 在springboot加vue项目中加入图形验证码
  • 【linux】文件与目录命令 - ln
  • 渗透测试工具:SQLmap安装教程及使用
  • 【算法专场】哈希表
  • 庞氏骗局(Ponzi Scheme):金融投资与公司经营中的隐形陷阱(中英双语)
  • 在我的世界地下城开发mod的第一天
  • 怎么才能DeepSeek批量写作和内容导出?
  • 傅里叶变换推导