My Little World

learn and share


  • 首页

  • 分类

  • 标签

  • 归档

  • 关于
My Little World

强化学习

发表于 2024-10-07

强化学习的主要思想不是告诉算法每个输入的正确输出是什么
而是指定一个奖励函数,告诉它什么时候做的好,什么时候做的不好
算法的工作是自动找出如何选择好的动作

一些概念

以火星探测器为例,在其决定路线的过程中产生的几个概念

  1. S : 当前状态
  2. a : 动作
  3. S’ : 下一个状态
  4. R : 奖励函数
  5. teminal state : 终止状态

    每种路线回报通过计算路上每一步奖励乘以折现系数加和得到

  6. policy : 策略函数,根据当前的状态选择可以获得最大收益的动作

A policy is a function π(s)= a mapping from states to actions, that tells you what action a to take in a given state s.

The goal of reinforcement learning ===>
Find a policy 5 that tells you what action (a = 5(s)) to take in every state (s) so as to maximize the return.

马尔科夫决策过程

未来只取决于当前的名称,而不是到达当前状态之前可能发生的任何事情

状态动作回报函数 Q

当前状态下执行一次函数能够得到的最大回报值
如果能够找到最大回报值也就能知道接下来应该用什么动作

贝尔曼公式



优化

面对环境随机的情况,动作实际执行过程可能存在多个可能路线,导致每次得到的最大回报值不同,因此计算当前状态最大收益时取所有路线情况的平均值进行计算
即使用期望回报值进行计算

DQN 算法

D: deep learning
Q: Q function
N: Network

对于连续状态值的情况,使用神经网络训练Q函数进行深度强化学习



By using experience replay we avoid problematic correlations, oscillations and instabilities. In addition, experience replay also allows the agent to potentially use the same experience in multiple weight updates, which increases data efficiency.
通过使用经验重放,我们可以避免有问题的相关性、振荡和不稳定性。此外,经验重放还允许代理在多次权重更新中使用相同的经验,从而提高数据效率。

优化

优化神经网络结构

上面将s和a作为X 同时参与训练,最终只会得到一个动作a最大回报函数值,需要进行多次运算
如果仅将s作为输入,输出层产生多个a的回报值,就可以根据回报值大小选择相应的动作


epsilon-greedy policy

选择action 过程中,如果一直按Q值最大原则选择action,万一初始值特别小无法开启我们想要的第一步程序,就会导致无法进行后续的action
epsilon-greedy policy 方案就是找一个合适的阈值epsilon,比如说0.05,
95%的时间选择最大Q值action (贪婪剥削策略)
5%的时间选择随机选择action(探索策略)
这样就可以避免选到固定不符合预期的action,开放一定的窗口有可能选到其他的action
epsilon 大小 类似于梯度,随训练过程进行会逐渐变小,变小的过程,模型也就学会了如何选择更有可能选择符合预期的action

小批量

训练数据如果非常庞大,在训练过程中可能会造成时间消耗,为了提高训练速度,可以采用小批量的方式进行
将训练数据分成多个批次,每次迭代用不同批次数据,虽然梯度会比较嘈杂,但还是会朝着梯度下降的方向进行



软更新

在更新参数过程中,每次按比例更新参数,每次仅更新部分比例的参数,可以使强化学习更好的收敛

强化学习的一些限制

实验练习

My Little World

推荐系统

发表于 2024-10-06

下面以根据电影评分推荐电影为例,介绍推荐系统的开发过程

思路整理

根据电影的特征,用户对每个电影都会有一个评分(0-5分),比如电影A的评分是5分,电影B的评分是4分,电影C的评分是3分
一般情况下,用户对某电影评分越高,说明后续对该类型电影的青睐度越高,对于系统来说越值得推荐给用户
即系统需要预测用户对某个电影X的评分,从而决定是否推荐给用户
系统需要依赖的数据是电影的特征数据(X)和以往用户对电影的评分数据(Y)
根据二者的关系,计算出相关的算法参数
当有需要预测一个电影评分的时候,输入待评分电影特征即可得到评分,然后根据阈值判断是否推荐给用户
下面是对一个观众的电影评分预测过程

对应的成本函数

如果训练集有多个用户的评分数据,拿到所有用户的参数后加合,就可以预测大众用户对某个电影的整体评分情况

协同过滤算法

对于电影的评分,一开始不能确定使用电影的哪些特征,协同过滤算法将输入,电影的特征X, 也看做是一个参数参与成本函数的计算
从而利用梯度下降过程找到合适的参数和特征值

推导过程

  1. 已知多个人对一部电影的评分和相关参数,可以反推出X 的 情况
  2. 如果现在已知多个人对一部电影的评分和相关参数,可以对电影特征X进行成本函数计算
    加和之后可以对多个电影的特征进行预测
  3. 观察成本函数的公式,现在加和参数和特征的成本函数,

  4. 可以发现, 梯度下降过程,可以同时找出多个人对电影评分参数和对多部电影的特征值推测

协同在这里的体现在于多个用户对一部电影进行了评价,通过合作得到了对电影的整体评价,同时可以预测出能够代表这部电影的特征值
反过来,可以预测尚未对同一部电影进行评分的其他用户的评分
即从多个用户收集数据,然后预测其他用户的评分

线性回归转向二进制分类

基于线性回归的推荐系统适合于上面评分有连续值的推测,基于上述思路,将评分结果通过逻辑函数转成二进制结果
即可实现二进制分类问题的预测


优化

均值归一化

对于尚未对电影作为任何评价的用户,如果参数为0,那么预测的评分结果为0,会极大影响推荐的准确性
因此,先对多用户评分计算均值,然后对所有用户的评分减去均值,得到新的评分,在新的评分上进行参数获取
进行评分预测的时候再把均值加回来,这样即使参数为0,预测的评分值也是之前评分的均值,对整体评分meian值不会有影响

如何找到相似的推荐

找到与当前item 距离最近的其他item

协同过滤的限制

  1. 对冷启动问题不友好
  2. 不能直接获取到有价值的特征数据,可能是关于观众或者电影的片面的信息,只能从这些信息上推测用户的爱好

基于内容的推荐算法

对比基于协同过滤的推荐算法(根据用户对相似item的评分进行推荐)
基于内容的推荐算法同时基于用户和item的特征,通过计算item 和用户的匹配度,来判断用户是否对该item感兴趣

主要思路

利用神经网络从用户特征和item 特征中提取n 个特征,计算二者的点积从而判断用户是否对item感兴趣,是否要推荐给用户




从大目录中进行推荐

  1. 进行检索,找出候选列表
    但是检索过程需要注意,通过对更多的项目进行检索可以得到更好的结果但是检索的速度回变慢,
    为了分析优化权衡二者,可以实施离线实验观察新增的检索项是否增加了检索结果的相关性

  2. 对候选列表进行fine-tune排序找出得分最高的item给用户



My Little World

异常检测

发表于 2024-10-05

异常检测

异常检测是机器学习中一个重要的概念,它是指在数据中检测出不符合预期的数据点,以便及时发现和处理异常情况。

检测方法:密度估计

密度估计是异常检测中的一种方法,它通过计算数据的密度分布来识别异常数据点。
通过将特征值的可能性进行乘积计算,得到数据的密度,然后跟阈值进行比较,判断当前数据是否正常。


高斯分布

高斯分布的位置受数据集的平均值𝜇和方差𝜎^2 决定

𝜇 决定钟形最高点在x轴上的位置
𝜎^2 决定钟形的宽度,因为整个钟形面积为1,所以,如果𝜎^2 变小,那个整个钟形会变得很高

异常检测算法步骤

  1. 在训练数据中选择你认为可能会引起异常的数据的n个特征值
  2. 计算各个特征值的平均值𝜇和方差𝜎^2
  3. 计算每个特征值的密度,如果密度小于阈值,则认为是异常数据

开发过程中如何评估异常检测系统

通常采用实数评估方案,就是可以用一个具体的数值小小来衡量算法的好坏
假设训练数据中的数据都是正常的,存在标签0
在交叉验证和测试数据中,存在少量异常数据,标签为1
测试算法好坏的标准就是能否将异常数据识别出来
如果是特别少量的异常数据,可以仅通过交叉验证来评估测试好坏
从而决定合适的阈值大小


另外的评估方法可参考二分类错误度量
相关的衡量指标,真假值,精确率,召回率,F1 score等

如何选择异常检测算法和监督学习

异常检测算法适用于

  1. 正常数据少量但是有大量异常数据
  2. 异常的特征值是未知的,且是多样的

监督学习算法适用于

  1. 存在大量异常和正常数据
  2. 有足够数据告诉算法什么是正常的数据,什么是异常的数据
    将来出现的异常数据很可能是之前训练集中出现过的异常数据

如何选择要使用的特征

  1. 选择符合高斯分布的特征,如果不能拟合高斯分布,可以通过取对数,开方等方式进行特殊处理后进行拟合
    但要注意,训练数据如果有对特征值进行特殊处理,那么交叉验证集合测试集也要进行相同的处理

  2. 对于误判的异常数据,可以通过增加特征值来进行弥补,保证数据在新加的特征值上存在异常大或者异常小的数据

  1. 可以在已有的原始特征值基础上创造新的特征值参与运算
My Little World

Kmeans 聚类算法

发表于 2024-10-03

无监督学习算法一

什么是聚类

将输入数据分成多个类别,每个类别包含一组相似的数据点的过程就是聚类,分好的类被称为cluster

聚类算法k-means处理过程

  1. 随机选择k个点作为初始的中心点, 计算每个点到中心点的距离,将每个点分配到距离最近的中心点所属的类别中
  2. 计算每个类别的中心点(平均值),并更新中心点,重复步骤1
  3. 直到中心点不再变化,或者达到最大迭代次数

具体实现(伪代码)


成本函数


如何初始化中心点

随机选择k个点作为初始的中心点(k小于m),计算最终中心点和损失函数
重复N次,选择损失函数最小的中心点作为最终的中心点

如何选择K的数量

取决后续如何使用分类好的集群数据

压缩图像应用

My Little World

决策树模型

发表于 2024-09-30

决策树模型是通过计算特征纯度后,选取最大纯度值的特征作为决策节点,
将数据根据是否符合当前特征节点一份为二,再根据特征纯度,继续划分,
最后根据停止划分规则进行数据分类或推测的模型

创建过程

决策树创建过程需要考虑两件事

  1. 在每个节点上如果选择根据什么特征进行数据分类
    Maximize purity
    如果一个特征在把数据分成两组之后,使分组后的数据能够最大程度的趋于同一类,那么这个特征就是纯度高的特征,
    即 如果这个特征能够直接决定数据属于哪个分类的程度越高,纯度就越高
    比如用DNA特征判断猫狗分类比用耳朵是尖的还是软的更直接,DNA特征就是最大纯度的特征

  2. 什么时候停止数据分类
    a. 当一个节点里面的数据都属于同一类的时候
    b. 到达树的深度最大值的时候,树越深,过拟合越有可能,计算成本越高
    c. 当特征纯度(熵)低于某个阈值的时候
    d. 当节点里的数据个数低于某个阈值的时候

熵

可以理解为数据的混乱程度,如果数据特别混乱,则值越大,返回数据如果种类单一,则值越小,趋近0
这里用熵来计算特征的非纯度或者较杂质程度,
如果根据某个特征分类后的数据的熵 越小,说数据越干净,杂质越少
反之,如果得到的熵越大,说数据越混乱,不同类的数据越多
如下面判断是否是猫的问题
p1 代表是每组数据中猫的比例,都是猫或狗的话熵 是0,5:5 的时候熵 最大值为1,数据最混乱

具体熵 的计算公式如下

信息增益

在了解熵的含义后,用下面的计算过程选择节点的判断特征
根节点的熵减去分类后两个节点熵的加权平均值,值越大说明分类后数据越纯了

这个计算方式得到的值就叫信息增益
即特征信息增益越大,在分类过程中,能够把数据分的越纯

小结

决策树学习过程

对于每个节点,都要像对待根节点一样
根据拿到的数据先找到最大信息增益的特征然后进行分类
整个过程就是一个递归的过程,直到满足停止分类的规则为止

多特征值处理办法

one-hot

If a categorical feature can take on 𝑘 values, create 𝑘 binary features (0 or 1 valued).
如果一个特征有大于2个以上的N可枚举值,那么将当前特征拆分成N个新的代表相应枚举值的特征即可

连续值

如果一个特质的值是连续值,不可枚举,那么需要设定一个阈值,大于该阈值一类,小于则是另一类,从而实现对该特征的二分类
阈值的选取还是通过计算信息增益,选取能够使信息增益值最大的阈值参与分类
一般情况下先对所有数据按这个特征值排序,然后选取排序列表中两个数据间的中点做阈值进行信息增益计算,
多轮计算后再从中选取信息增益最大的阈值

回归树

上面是使用决策树进行分类计算
接下来使用方差对连续数据进行推测,就是回归树
如下图,根据前三个特征,推测weight 的值,weight 是个连续的值,不能枚举的

决策树练习

多个决策树

单个决策树对训练数据非常敏感,只要更改一个训练数据,就有可能更改信息增益排序,
从而影响节点特征选择,进而导致整棵树发生变化,使得算法失去健壮性
解决办法就是构建多个树,让他们投票最终的预测结果,使整体的算法对任何单个树可能在做什么不那么敏感

放回抽样

一共有m个训练数据,每次从m个数据中随机抽取1个数据,直到抽取到m个数据,抽取到的数据可能是重复的

随机森林算法

使用放回抽样的数据选取方法,每次拿到m个训练数据,用这个m个训练数据训练决策树,重复 B(小于100)次,
得到B棵决策树,从而形成决策树森林对预测结果进行投票,这种算法就是随机森林算法

B 如果大于100 一个是训练效果会下降,推测准确性降低,另外一个就是会增加计算成本,使算法变得复杂,得不偿失

随机特征选取

对于具备N个特征的数据,通常选择N的K个特征子集进行训练,如果N特别大,K一般等于N的平方根

XGBoost 随机森林增强算法

除了第一次等概率的从m个训练数据中抽样new dataSet 外,后续的每一轮抽样,都将前一轮推测失败的训练数据的权重加大,
使被抽取到的概率变高,尽可能的将推测失败的数据参与到后续的训练中,从而推动算法更快的学习,并学习的更好,提高算法的准确性

这种算法又称为XGBoost 算法,是随机森林算法的改进版,优点如下

决策树 VS 神经网络

决策树& 决策森林

适合结构化数据(可以用表格表示的数据)
不适合非结构化数据(音视频,图像)
小的决策树可以被人类解释推测过程
训练速度快,缩短算法迭代循环周期,更快的提高算法性能

神经网络

对于所有数据类型都很友好,包括结构化和非结构化
训练速度比决策树要慢
但可以轻松实现迁移学习,但是决策树每次训练只能特定的特征,得到特定的决策树
方便构建多模型系统,神经网络间串联方便

My Little World

机器学习开发过程

发表于 2024-09-29

整个开发过程是一个选择框架,训练模型,诊断模型循环的过程

错误分析

除了从高偏差高误差角度对模型进行分析外,还可以对mcv 产生错误分类的角度对模型进行分析

可以从交叉验证集测试产生的错误中进行分析
通过将错误进行归类统计,找出对模型影响比例较大的错误和比例较小的错误
从而调整模型训练的方向,已解决上面遇到的问题

如果交叉验证集产生错误的数据比较庞大,可以选择进行随机抽取一定小批量的数据进行错误分类,以节省人力

添加数据

通过引入更多数据完善模型的判断,更关注通过注入的数据引发的对模型的训练结果的影响

数据增强

Augmentation: modifying an existing training example to create a new training example.
在原有数据基础上,通过添加特定种类的噪声,形成新的测试数据,从而完善特定种类的错误判断
对于图片和音频数据都适用

但是对添加随机或者无意义噪声产生的数据进行训练,对于模型训练不会有多大帮助

数据合成

Synthesis: using artificial data inputs to create a new training example.
直接由计算机合成训练过程中使用的数据,通常用于计算机视觉训练的场景

迁移学习

在已有大模型训练结果基础上,通过修改输出层结果使之符合自己使用场景的训练方法
好处是,在数据有限的情况下,可以直接使用输出层之前的参数开始训练,减少自己从头开始训练的工作

例如下面这个使用1000+分类的训练识别数字0-9的模型,只是在输出层将1000+ 输出改成10种输出,在此基础上开始训练

一般训练步骤为下载相同输入(文本的下载文本的,音视频的下载音视频的)的预训练模型,然后用自己的数据进行训练(fine tuning)

完整开发流程

部署阶段

通常应用层跟模型通过Api 进行通信,用户输入x, 模型返回预测值y^
软件工程师需要注意

  1. 尽可能的保障低成本的计算出具有可靠性和有效性的预测结果
  2. 可以进行大规模用户扩展使用
  3. 在用户隐私允许同意的情况下进行日志记录输入和输出
  4. 对模型进行系统监控,比如根据上面日志的记录,计算出因为当前数据变化导致计算结果不准时,判断是否让模型进行进一步优化
  5. 保障模型更新,在上一步进行模型优化后要保证能够将老的模型替换成新模型

避免道德偏见伦理问题

  1. 建议多元化(多背景,多种族)团队,上线前进行头脑风暴,探索可能对弱势群体造成伤害的可能
  2. 参考行业标准
  3. 上线前通过技术诊断产生的伤害可能性,从而决策是否可以上线
  4. 制定延缓计划,上线后观测可能产生的伤害,及时进行回滚处理

二分类错误度量

在对倾斜数据集(y=1 和y = 0 所占比例不是5:5)进行训练时,
判断模型预测结果好坏通常交叉验证集的数据计算精确率和召回率两个指标衡量

如果二者都趋近0或1时,说明当前的模型不是一个有用的模型,一直在打印0或1
只有二者值都很大时,才说明算法是有用的

精确率表示实际上y = 1的可能性
召回率表示模型计算出y = 1 的可能性

对于精确率和召回率的衡量

一种是通过设置阈值大小去权衡二者,从而进行取舍
提高阈值,会增加精度,降低召回率
降低阈值,会降低精度,提高召回率

另外一种是使用F1 score分数(调和平均数),自动计算出最佳的精度和召回率,从而选择对应的算法

My Little World

高偏差和高方差

发表于 2024-09-27

通过判断高方差和高偏差的大小可以判断模型的性能问题
一般有以下两个性能问题
高偏差意味着模型欠拟合
高方差意味着模型过拟合

高偏差的情况下,
Jtrain 值会比较大,且Jtrain和Jcv 值相近
也就是说Jtrain 较高对应的训练数据的拟合度本身就不够

高方差的情况下,
Jcv 会远大于Jtrain, Jtrain 值可能比较小
就是说模型对训练数据很拟合,但是对交叉验证数据不够拟合

也有高方差和高偏差两个问题同时存在的情况
Jtrain 值会比较大,且Jcv 远大于Jtrain,
这种情况意味着模型可能对一些数据过拟合,对一些数据又存在欠拟合

正则化参数𝜆 对模型的影响

如果𝜆偏大会导致Jtrain 偏大,出现欠拟合
(想象𝜆现在是一个非常大的数值,为使Jtrain 最小,就会让w值逐渐趋近0, 最终模型无限接近b)
如果𝜆偏小会导致Jtrain 偏小,但是Jcv 偏大,出现过拟合
(想象𝜆现在无限趋近于0,或者直接等于0, 那么要使Jtrain 最小,w取值就得变大,多项式就会被保留,最终模型出现过拟合)
如果𝜆取值适中就可以实现Jtrain和Jcv 值都偏低,模型适当拟合的效果

𝜆 如何取值

通过选取不同 𝜆 带入计算最小损失函数,用得到的(w,b)值计算Jcv, 选取多组Jcv 中 最小值的(w,b)进行Jtest 计算,

𝜆 趋势图

𝜆 对于误差的影响趋势和多项式对误差的影响趋势呈镜像关系
𝜆 值从小到大,Jtrain 从小到大,模型从过拟合到欠拟合
多项式平方数从小到大,Jtrain 从大到小, 模型从欠拟合到过拟合

建立性能基准线来判断模型性能

计算基准线与Jtrain 的差A, A 如果偏大说明模型存在高偏差欠拟合问题
计算Jtrain 与 Jcv 的差B,B 如果偏大说明存在高方差过拟合问题
如果A 大于B 说明存在高偏差,欠拟合
如果A 小于B 说明存在高方差,过拟合
如果A 和 B 数值接近,说明 高偏差和高方差同时存在

基准线可以来自
人类的测试水平
竞争算法的性能水平
基于过程经验判断的水平

以 语音识别为例

学习曲线

Jtrain 和Jcv 随 训练集大小m变化的趋势曲线被称为学习曲线

一般情况下,
Jtrain 会随m 变大逐渐变大,因为为了拟合更多数据,数据比一定会散落在曲线上,误差累加起来数值会变大
Jcv 会随m 变大逐渐变小,因为更多的数据可以展示更多的情况,是模型拟合度更高,对于Jcv 计算就是越小

但是对于存在高偏差的模型,增加样本数量并不一定能对模型拟合产生多大帮助,
因为高偏差模型具备欠拟合特点,随样本数增加损失函数也会增加,且相对基本线误差依然存在

对于存在高方差的模型,增加样本数量可以起到一定帮助
因为高方差模型具体过拟合特点,会将增加的样本继续拟合到自己的训练模型中,相当容纳近了更多的数据情况
可以更好的拟合实际的情况

小结

高偏差和高方差的一些解决方案

神经网络中的应用

神经网络是低偏差的模型,
在训练过程中如果Jtrain 过大可以使用更大的神经网络,缺点就是运算速度会变低且会增加研发成本
在Jtrain 基本与基准线相差不大时计算Jvc,如果Jvc 过大可以增加数据样本重新回到模型计算
经过上面不断重复的过程,最终得到合适的模型参数

只要数据规则化做的合适,大型神经网络总是会比小型神经网络表现好一些

在tensorFlow 中,可以在构建layer 时传入规则化参数

练习

练习多项式,正则化参数𝜆,训练数据个数m, 神经网络层数
链接

The simple model is a bit better in the training set than the regularized model but it worse in the cross validation set.

My Little World

一些其他的概念

发表于 2024-09-25

Adam Algorithm

一种加快模型学习的优化算法
可以自动调节学习率的大小,使模型更快的朝梯度下降的方向学习


卷积层

之前讨论的神经网络中的中间层,都依赖上一层所有的输出进行计算
Each neuron output is a function of
all the activation outputs of the previous layer.
有一种计算方案是只选取上一层的部分数据计算本层的输出
这种layer 被称为卷积层(Convolutional Layer)
优点有两个
一个是可以加快计算,
另外一个是可以减少需要的训练数据

降低预测结果错误率

拿到训练模型后,如果遇到一个不可接受的错误输出,可以通过以下方式进行重新调整

更常见的方式是用诊断的方式评估模型好坏
在训练前将数据分成两组,
一组用于模型训练,称为训练组
另一组用于测试训练得到的模型,称为测试组

比如对于过拟合的情况
将数据分成两组

分别计算训练组和测试组的损失函数

对于训练组数据的损失函数肯定会更小
要关注的是测试数据的损失函数,值越小,说明越近真实的值,说明模型越好
上面是线性回归模型,下面是对于分类问题的损失函数计算

如果需要在多个模型间进行选择,可以在一开始的时候将数据分成三组
训练组,交叉验证组,测试组

同样计算基于交叉验证组数据的损失函数,值越小说明越符合实际数据
主要作用是用于选择模型,比如挑出最合适的多项式

然后再使用测试组数据进行泛化错误的测试




My Little World

多分类问题

发表于 2024-09-25

Softmax regression

之前的二分类问题用logic regression 可以解决,
但是对于多分类问题,可以在此基础上,遵循所有可能性加和为1的原则
进行扩展

假如现在需要判断4种可能性的概率
那我们需要四条分界线(如下图在z1-z4)
然后通过通过下面这个公式

计算得到a1 - a4
就可以得到4种可能性的概率

这种算法就是 Softmax regression

损失函数

参照逻辑回归函数的损失函数
假如y = 1, 那么损失函数就是

y = 0 的话损失函数就是

归纳一下就是,当y = an时
损失函数就是Loss = -log(an)
因为 y 只能可能是a1-an N 种可能性中的一种
下面的Loss趋势图说明,当an 值越接近1 的时候 损失函数越小
也就是说a1 - an 这些概率值越接近1 损失函数越小
相当于概率值对应的可能性越可能接近真实y值,越准

在神经网络中使用

之前的二分类问题中,在神经网络的最后一层使用sigmoid 函数作为输出函数(或者激活函数)可以识别图片中的 0 和 1
现在如果要识别图片中的数字是0-9 10种分类中的哪一种,
要做的就是将输出层激活函数换成softmax 函数,并且是10个节点就可以实现
每个节点代表一种可能,值最大的就是可能性最大的值

tensorFlow 中实现

方案1

不推荐,用方案2优化

方案2

原因是在tensorFlow 中使用中间步骤计算数值和直接将式子带入计算最终值的处理过程不同,tensorflow 会对后者重新排列表达式中的术语
并想出一种更准确的计算方式去计算,方案二在方案一基础上做的修改就是在将式子带入计算,而不是先计算中间值,再带入

区别多标签多分类问题

上面讨论的是多分类问题,一个问题多个可能性
多标签多分类问题是指同时推测多个问题的多个可能性

计算方式可以是分别看成单个神经网络计算,一个神经网络处理一个问题的多种可能
也可以同时计算,输出多个问题对应的多个可能

My Little World

神经网络

发表于 2024-09-20

什么是神经网络

类似于大脑中的神经元传递信息的过程,将多个输入通过多层模型处理后得到结果输出的架构,就是神经网络



复杂神经网络的表示

从预测手写数据0和1 的过程,理解神经网络向前传播的计算原理

The parameters have dimensions that are sized for a neural network with 25 units in layer 1, 15 units in layer 2 and 1 output unit in layer 3.
the dimensions of these parameters are determined as follows:
If network has 𝑠𝑖𝑛 units in a layer and 𝑠𝑜𝑢𝑡 units in the next layer, then
𝑊 will be of dimension 𝑠𝑖𝑛×𝑠𝑜𝑢𝑡 .
𝑏 will a vector with 𝑠𝑜𝑢𝑡 elements
Therefore, the shapes of W, and b, are
layer1: The shape of W1 is (400, 25) and the shape of b1 is (25,)
layer2: The shape of W2 is (25, 15) and the shape of b2 is: (15,)
layer3: The shape of W3 is (15, 1) and the shape of b3 is: (1,)
Note: The bias vector b could be represented as a 1-D (n,) or 2-D (n,1) array. Tensorflow utilizes a 1-D representation and this lab will maintain that convention.

向前传播:从左到右计算,根据输入计算出输出,输出即预测结果,

使用tensorflow 实现向前传播的神经网络

具体实现


Tensorflow models are built layer by layer. A layer’s input dimensions ( 𝑠𝑖𝑛 above) are calculated for you. You specify a layer’s output dimensions and this determines the next layer’s input dimension. The input dimension of the first layer is derived from the size of the input data specified in the model.fit statment below.

Note: It is also possible to add an input layer that specifies the input dimension of the first layer. For example:
tf.keras.Input(shape=(400,)), #specify input shape
We will include that here to illuminate some model sizing.

调用numpy()方法可以实现张量和numpy matrix 之间的转换

使用tensorflow 实现神经网络的另外一种架构形式

The model.compile statement defines a loss function and specifies a compile optimization.
The model.fit statement runs gradient descent and fits the weights to the data.

图片识别0和1练习

神经网络的训练过程






如何选择激活函数

常见的三种激活函数

选择激活函数的一般规则
对于输出层,根据输出值来
如果是二分类问题,使用sigmoid
如果是输出正负值都有就选则线性激活函数
如果输出值非负,那么 就使用ReLu函数
对于中间层,一律使用ReLu函数
原因有三

  1. 一个是作为激活函数,本身计算过程比sigmoid 函数简单
  2. relu只有在小于0 的时候斜率为0,sigmoid 函数在趋向正负无穷的时候有两处斜率趋近0 的情况,会导致梯度下降计算过程变慢,所以ReLu函数在梯度下降过程相比之下会更快一些
  3. 如果在隐藏层使用线性激活函数,输出层是sigmoid函数,整个过程等同于线性回归,最终始终会变成二分类的结果

123…25
YooHannah

YooHannah

246 日志
1 分类
21 标签
RSS
© 2025 YooHannah
由 Hexo 强力驱动
主题 - NexT.Pisces