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

机器学习-02(深度学习的基本概念)

机器学习的步骤

1.定义带有未知参数的函数

线性模型(linear models)具有较大的限制(Model Bias)

        y = b + wx

无论如何更改b或者w,其只会呈现出一条直线,不能满足更加复杂的现实情况。

我们可以将复杂的函数(分段函数)看作:常数(其大小为实际函数与Y轴的交点)+激活函数(在小于某个数值时,为某个常数,在大于某个数值时,为某个常数)

红色为Piecewise Linear Curves(分段函数),蓝色为Hard Sigmoid(激活函数)

第一激活函数的转折点设在实际函数的第一个转角。分段函数的斜率与实际函数的斜率相同。同理第二个激活函数的转折点设为实际函数的第二个转角处,斜率相同......

最终实际函数等于f0+f1+f2+f3 

有多个线段组成的函数称为Piecewise Linear Curves(分段函数),其都可以通过上面的方法组合出来。其转折的次数越多,需要的蓝色函数也越多。

在曲线问题上,我们可以通过微分的思想,在曲线上取足够多的点,以直代曲,这样就可以用直线来逼近这条连续的曲线。

所以可以通过分段函数去逼近任何连续的曲线。

激活函数可以使用一段S型曲线(sigmoid funcation)来逼近它

可以简写为:y = c sigmoid(b+wx1)

通过不断调整b、w和c来制造出不同的S型曲线

前面所求的分段函数就是多个激活函数累加之后的结果

i代表激活函数(蓝色函数),j代表特征的编号(如j = 10,则取前十天的样本进行计算)

wij代表在第i个激活函数里面的第j个特征的权重

其中r1、r2 和r3可以简化为矩阵与向量的加法和乘法:

所以
就可以写成

其中x是输入的特征,灰色的b是标量,w为矩阵,_c{^{T}}和绿色的b是向量

将所有的未知参数进行拆分,拼成一个很长的向量统称为\theta

2.定义来自训练数据中的损失函数

拥有了新的模型之后,Loss与之前的定义方法还是一样的,只是符号更改了一下,变为:        

        L(w,b) ====> L(\theta)  用\theta来代表所有的未知参数

损失函数(Loss function)所作的事情就是,当\theta为某一个数值的时候,会有多好还是有多不好

计算方法与只有两个参数的时候类似,假设给定一个\theta值,再输入一个x,查看估算的y值,计算与真实的\hat{y}(label)之间的差距,以此类推。把所有的误差加起来就得到了Loss

3.最佳化问题

optimization的演算法还是gradient descent。

寻找一组\theta让Loss最小,将这一组\theta称之\theta*。

寻找\theta*:
1.随机选一个初始值\theta0

2.计算微分,对每一个未知的参数都去计算起对L的微分,之后把微分集合起来组成一个向量g(gradient)。

通常的表示方法:,其中倒三角形的意思是把所有的参数\theta1、\theta2、\theta3等对L做微分,算微分的\theta值为\theta0。

3.更新参数列表

其中两式相减是因为梯度的方向式函数增长最快的方向,朝着负方向式下降最快的方向。

重复以上的步骤,不断更新\theta,直至不想继续更新或者得出\theta = 0。

在实际操作中,不是使用全部的数据去计算Loss,而是将数据分为多个batch(批)。多次进行计算,算出L1、L2、L3等,之后计算出gradient。

一次查看所有批次称之为一次epoch,epoch指的是整个训练数据集通过神经网络一次的过程。 每一次更新参数称之为update。、

所以一个epoch并不是更新参数一次。更新次数由batch size决定

例如:

ReLU(另外一种激活函数)

hard sigmoid可以看作式两个rectifier linear unit的叠加。

ReLU比Sigmoid更优。

Sigmoid或者ReLU等可以叫作Neuron,很多的Neuron可以叫作Neuron Network

过拟合(Overfitting) 

指的是在已知的训练资料上变好,而在未知的训练资料上没有变好。

相关文章:

  • chapter02_AbstractBeanfactory与模板方法
  • 力扣第87题-扰乱字符串
  • 支持向量机(SVM)在医疗诊断:医学影像领域的应用与实现
  • 现代 JavaScript (ES6+) 入门到实战(八):总结与展望 - 成为一名现代前端开发者
  • 现代 JavaScript (ES6+) 入门到实战(五):告别回调地狱,Promise 完全入门
  • PCB工艺学习与总结-20250628
  • Ubuntu20 编译安装 Redis7.2.4
  • MySQL 安装使用教程
  • Ubuntu22 安装 RTX 5070 Ti Nvidia Driver 驱动
  • NeRF-Lidar实景重建:大疆Mavic 4 Pro低成本建模方案(2025实战指南)
  • docker启动xxl-job 网络问题
  • 解锁Ubuntu安装:从新手到高手的通关秘籍
  • 在Mac上查找并删除Java 21.0.5
  • 阶乘求和全解析:从 Python 秒过到 C++ 手写高精度
  • 【Redis#4】Redis 数据结构 -- String类型
  • 【如何实现分布式压测中间件】
  • 什么是区块哈希(Block Hash)
  • 图片元数据与防篡改技术指南
  • 编写c++程序分别在x86和arm架构的ubuntu下访问CAN 接口设备
  • 80%的知识库场景选择FastGPT,20%的复杂场景选择Dify