勘探开发人工智能技术:机器学习(5)

news2024/11/24 23:52:18

0 提纲

6.1 矩阵分解
6.2 全连接 BP 神经网络
6.3 卷积神经网络
6.4 LSTM
6.5 Transformer
6.6 U-Net

1 矩阵分解

把稀疏矩阵分解成两个小矩阵的乘积, 恢复后的矩阵用于预测.

1.1 基本概念

矩阵分解是使用数学应对机器学习问题的一类典型而巧妙的方法.
矩阵分解是把将一个 m × n m×n m×n矩阵 R \mathbf{R} R 分解为:
m × k m×k m×k 矩阵 P \mathbf{P} P n × k n×k n×k 矩阵 Q \mathbf{Q} Q
使得 R ≈ P T Q \mathbf{R}≈\mathbf{P}^\mathbf{T}\mathbf{Q} RPTQ, 其中 k ≪ min ⁡ { m , n } k≪\min\{m,n\} kmin{m,n}.
在这里插入图片描述
有两种常见的情况:

  • 非负矩阵分解 要求两个个矩阵的元素均为非负值. 这样在其应用中才有良好的解释.
  • 稀疏矩阵分解 要求 R \mathbf{R} R为稀疏矩阵, 即其元素绝大多数值为 0.

在这里插入图片描述

1.2 稀疏矩阵分解的应用: 推荐系统

问题引入: 电影网站有 m > 1 0 6 m > 10^6 m>106个用户, 以及 n > 1 0 4 n > 10^4 n>104部电影. 由于每个用户仅看了少量 (通常少于 1 0 3 10^3 103, 很多少于 1 0 2 10^2 102) 电影, 所以评分矩阵 R = ( r i j ) m × n \mathbf{R}=(r_{ij})^{m×n} R=(rij)m×n是一个稀疏矩阵, 其中 r i j = 0 r_{ij}=0 rij=0 表示用户没看这部电影, 而1~5分表示从最不喜欢到最喜欢. 现在需要预测用户对电影的评分, 也就是将0替换成具体的分数.
问题定义:

  • 输入:评分矩阵 R \mathbf{R} R, 秩 k k k;
  • 输出:用户偏好矩阵 P ∈ R k × m \mathbf{P} \in \mathbb{R}^{k \times m} PRk×m, 矩阵 Q ∈ R k × n \mathbf{Q} \in \mathbb{R}^{k \times n} QRk×n.
  • 优化目标:
    min ⁡ ∣ ∣ R − P T Q ∣ ∣ \min ||\mathbf{R} - \mathbf{P}^\mathbf{T}\mathbf{Q}|| min∣∣RPTQ∣∣

这里计算优化目标的时候, r i j = 0 r_{ij} = 0 rij=0 的数据点并不参加计算. 这样, 当把两个小矩阵 (也称用户子空间与项目子空间, subspace) 求到后, 直接相乘 R ′ = P T Q \mathbf{R}′ = \mathbf{P}^\mathbf{T}\mathbf{Q} R=PTQ, 以前 r i j = 0 r_{ij} = 0 rij=0的地方, r i j ′ = 0 r_{ij}' = 0 rij=0 就有了值, 这就是预测评分.
有没有觉得特别神奇?

1.3 推荐系统:小例子

其中用 − 表示 0, 更清楚一些
在这里插入图片描述
在这里插入图片描述
当然, 这个方案并不完美, 如

  • P , Q \mathbf{P}, \mathbf{Q} P,Q 有些元素为负值, 解释起来有点难受. 可以考虑非负矩阵分解.
  • R ′ \mathbf{R}' R有些元素不在正常范围[1,5], 可以强行让越界的数据回到边界.

1.4 SVD: 解决过拟合

为了避免过拟合, 优化目标上还可以加上正则项, 如:
min ⁡ ∣ ∣ R − P T Q ∣ ∣ + λ ( ∣ ∣ P ∣ ∣ 2 + ∣ ∣ Q ∣ ∣ 2 ) \min ||\mathbf{R} - \mathbf{P}^\mathbf{T}\mathbf{Q}|| + \lambda(||\mathbf{P}||^2 + ||\mathbf{Q}||^2) min∣∣RPTQ∣∣+λ(∣∣P2+∣∣Q2)
参考论文:Ruslan Salakhutdinov and Andriy Mnih, Probabilistic Matrix Factorization, NIPS, 2007.

1.5 子空间的物理意义

从推荐系统的角度, 每个用户对应于 1 × k 1 × k 1×k 的向量, 这是对用户偏好的高度压缩;
每个项目也对应于 1 × k 1 × k 1×k 的向量, 这是对项目属性的高度压缩.
这 k 个偏好和属性形成一一对应. 例如, k = 3 k = 3 k=3:

  • 第 1 维表示用户对颜值的关注度 (对应的是电影男女主的帅气与漂亮程度);
  • 第 2 维表示用户对情节的关注度 (对应的是剧本的逻辑性);
  • 第 3 维表示用户对视觉震撼度的要求 (对应的是电影场景与特效).

需要注意, 这里只是强行解释, 在现实世界中, 而这 k 个偏好 (属性) 的涵义可能无法表达出来, 因此我们称之为隐藏变量 (latent variable).
例:

  • 用户向量为 [ 0.8 , 0.1 , 0.1 ] 表示他是个颜控, 而电影向量为 [ 0.1 , 0.7 , 0.2 ]表示它更注重情节, 两者求内积导致评分低.
  • 如果电影向量为 [ 0.9 , 0.01 , 0.01 ]则更好地迎合该用户的品味. 内积居然可以起到这种匹配的作用.

假设 m = 1 0 6 m = 10^6 m=106, n = 1 0 4 n = 10^4 n=104, k = 10 k = 10 k=10, 原始矩阵 (如果不考虑稀疏矩阵的压缩存储) R 需要 1 0 1 0 10^10 1010存储空间;
而 P与 Q 的存储空间分别是 1 0 7 10^7 107 1 0 5 10^5 105. 从这个意义上来说, 数据的压缩比达到了约 1 : 1000.
与数据压缩相对应的是

  • 坏消息: 信息损失. R′无法对 R 完全拟合, k k k 越小, 拟合能力越差.
  • 好消息: 数据平滑. 我们经常假设原数据就是有噪声的, 矩阵分解并恢复后, 可以将它们去掉. 甚至可以将一张人脸图片进行矩阵分解与恢复, 达到美颜去痘的效果.

1.6 Bias-SVD:偏置

偏置部分主要由三个子部分组成:

  • 训练集中所有评分记录的全局平均数 μ μ μ;
  • 用户偏置 b u b_u bu,独立于物品特征的因素,表示某一特定用户的打分习惯(批判性用户、乐观型用户);
  • 物品偏置 b i b_i bi,独立于用户兴趣的因素,表示某一特定物品得到的打分情况(好片、烂片);
    b u i = μ + b u + b i b_{ui}=μ+b_u+b_i bui=μ+bu+bi
    在这里插入图片描述

1.7 带情感分析的矩阵分解(SBMF)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
参考论文:Sentiment based matrix factorization with reliability for recommendation. Expert Systems with Applications. (2019) 249-258

1.8 带情感分析的矩阵分解(SBMF+R)

在这里插入图片描述
在这里插入图片描述

2 全连接 BP 神经网络

线性 + 激活函数, 人工神经网络是万能的函数逼近器.

2.1 BP 神经网络的结构

BP (Backpropagation ) 神经网络是一个万能的函数模拟器.
所有的神经网络, 本质都是特征提取器 – 斯.沃索地.

下图给出一个四层神经网络.

  • 输入层有 3 个端口, 表示数据有 3 个特征;
  • 第一个隐藏层有 5 个节点, 表示从 3 个特征提出了 5 个新的特征, 每个新特征都是前一特征的加权和 (线性模型);
  • 第二个隐藏层有 4 个节点, 表示从上一层的 5 个特征提出了 4 个新的特征;
  • 输出层有 2 个节点, 表示从上一层的 4 个特征提出了 2 个新的特征.

在这里插入图片描述
神经网络可以解决各种机器学习问题:

  • 假设这里应对的是二分类问题, y 1 y_1 y1对应于负例, y 2 y_2 y2对应于正例, 那么, y 1 ≥ y 2 y_1 ≥ y_2 y1y2时, 就预测为负例, 否则预测为正例.
  • 对于 k k k 个类别的多分类问题, 输出端口数设置为 k k k.
  • 对于回归问题, 输出端口设置为 1.

2.2 激活函数

仅仅是线性方案, 也就相当于logistic 回归 的水平, 肯定不能让 BP 神经网络达到现有的高度. 而且, 仅仅是线性方案, 多层与两层没有区别, 因为三层的 X W 1 W 2 \mathbf{X}\mathbf{W}_1\mathbf{W}_2 XW1W2可以替换为两层的 X W 3 \mathbf{X}\mathbf{W}_3 XW3, 其中 W 3 = W 1 W 2 \mathbf{W}_3 = \mathbf{W}_1\mathbf{W}_2 W3=W1W2.

  • 激活函数将加权和变成另一个值, 如 f ( x ) = max ⁡ { 0 , x } f(x) = \max\{0, x\} f(x)=max{0,x}
  • 这种简单到令人发指的函数, 就可以改变线性特点.
  • 于是, 神经网络就变成了万能的函数逼近器, 也就是说, 任意函数都可以用一个神经网络来逼近, 参见 https://zhuanlan.zhihu.com/p/162769333

在这里插入图片描述

2.3 与 PCA 的联系与区别

联系: 都是进行特征提取.
区别:

  • PCA 的特征提取是无监督的, 神经网络一般是有监督的;
  • PCA 的特征提取有理论依据, 神经网络的连边使用一些随机的初始权重, 然后不断调整;
  • PCA 的特征提取数量有理论依据, 神经网络每层节点数量 (特征数量) 是人为设置的超参数, 连激活函数的选取也是人为的.

2.4 深度学习与宽度学习

如果数据集比较小, 特征比较少, 则应该使用较少的层数, 以及较少的节点数.
如果数据集比较大, 特征比较多, 则应该使用较多的层数, 以及较多的节点数. 所以形成了深度学习. 换言之, 深度学习特别“吃”数据, 数据量小了就别玩, 去搞搞SVM之类的小样本学习吧.

宽度学习是指隐藏层的节点数非常多, 理论上已经证明, 宽度学习与深度学习是等价的. 我认为原因在于: 由于神经网络初始权重设置的随机性, 宽度学习提取的特征非常多, 总有几个是合适的.

2.5 关于调参师

有些人诟病做神经网络 (特别是应用) 就是当网络调参师: 几层,什么激活函数,以及哪些组件 (这个在后面要介绍). 我还是有不同意见. 机器学习需要有洞察力 (insight), 如果基础不牢, 没有机器学习的基本思路, 就像在漆黑的屋子里面找东西一样, 纯碰运气是不气的. 本系列贴子也是希望为读建立一些 insight.

3 卷积神经网络

卷积核是个透视镜, 把原图像扫描一遍变成新图像.

3.1 卷积操作

下图下平面标定的 3×3 区域, 对应于个3×3 卷积, 这 9 个数对应着相乘, 然后相加, 获得了上平面标定的 1 个小区域的值. 注意这里不是矩阵的乘法.
卷积有三种模式, 可以把图片变大 (full)、变小 (valid)、保持尺寸 (same).
与全连接网络相同, 卷积神经网络 CNN 也需要在加权和之后使用激活函数, 以使其具有非线性的优点.
在这里插入图片描述
卷积层:特征提取
可以将图像卷积看成全连接网络的权值共享(weight sharing)

在这里插入图片描述

等价于下边的权值共享网络:
在这里插入图片描述

3.2 ReLU 激活层

加入非线性因素,将卷积层输出结果做非线性映射。
ReLU 函数:对于输入负值,输出全为0;正值原样输出。
在这里插入图片描述

3.3 池化层:提取重要的特征信息

100×100 的图片, 用3×3 卷积核去卷, 第 2 层变成98×98 图片, 第 3 层变成96×96 图片, 太慢啦!
用池化操作可以把多个点压缩成一个点, 如把 98×98 图片每 2×2 个点取最大值 (或平均值, 最小值), 瞬间变成 49×49 的图片.
是不是很随意的样子? 有效就行.
在这里插入图片描述

3.4 单层卷积神经网络

在这里插入图片描述

3.5 全连接层

全连接层在整个卷积神经网络中起到“分类器”的作用,即通过卷积、池化等深度网络后,再经过全连接层对结果进行识别分类.
在这里插入图片描述

3.6 卷积神经网络流程

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/860407.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字万用表测量基础知识--DMM的显示位数

概览 DMM(即数字万用表)是一种电气测试和测量仪器,可测量直流和交流信号的电压、电流和电阻。本文介绍如何正确使用和理解数字万用表(DMM)。 DMM的显示位数 数字万用表(DMM)可用于进行各种测量。在选择DMM或理解所使用的DMM时,首…

jupyter切换conda虚拟环境

环境安装 conda install nb_conda 进入你想使用的虚拟环境: conda activate your_env_name 在你想使用的conda虚拟环境中: conda install -y jupyter 在虚拟环境中安装jupyter: conda install -y jupyter 重启jupyter 此时我们已经把该安装…

【学习FreeRTOS】第3章——FreeRTOS移植及配置文件

1.FreeRTOS源码简介 【一级目录:/】以下FreeRTOS的源码,其中,FreeRTOS文件夹最为重要,代笔FreeRTOS内核 【二级目录:/FreeRTOS】以下为FreeRTOS文件夹的内容,比较重要的有Demo文件夹和Source文件夹 【三级…

【使用Hilbert变换在噪声信号中进行自动活动检测】基于Hilbert变换和平滑技术进行自动信号分割和活动检测研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

linux文件I/O之 close()、lseek()、read()、write() 函数用法

1. close() 函数 头文件和函数声明 #include <unistd.h> int close(int fd); 函数功能 关闭一个文件描述符 返回值 成功时返回 0。失败则返回 -1&#xff0c;并设置 errno 为相应的错误标志。 参数 fd&#xff1a;文件描述符 说明 像其它所有系统调用一样&…

UNet Model

论文地址 第一阶段 conv2d(33) first conv&#xff1a;5725721 → 57057064 second conv&#xff1a;57057064 → 56856864 代码 # first 33 convolutional layer self.first nn.Conv2d(in_channels, out_channels, kernel_size3, padding1) self.act1 nn.ReLU() # Seco…

渠道订货管理:品牌商建立渠道连接的纽带

当品牌商&#xff08;厂商&#xff09;渠道拓展到一定规模&#xff0c;处理不同渠道交易数据&#xff0c;面对信息流、物流、资金流链路&#xff0c;提升厂商端、经销商端、终端门店的订货体验就会变得尤为重要&#xff0c;特别是一些实力级厂商&#xff0c;渠道下沉能够掌握终…

同步代码块使用错误示范 | 用了synchronized还是出现“超取”问题

记录一下错误&#xff0c;吸取经验&#x1f914;&#x1f60b; 出问题的代码 public class Test {public static void main(String[] args) {new Thread(new Account()).start(); //&#xff01;&#xff01;new Thread(new Account()).start(); //&#xff01;&#xff01;}…

Lecoode有序数组的平方977

题目建议&#xff1a; 本题关键在于理解双指针思想 题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 文章讲解&#xff1a;代码随想录 视频讲解&#xff1a; 双指针法经典题目 | LeetCode&#xff1a;977.有序数组的平方_哔哩…

​朋友圈评论截图生成,制作朋友圈网页​

朋友圈头像&#xff0c;上传自己的朋友圈头像&#xff1b;不填默认随机 网名&#xff0c;填写微信昵称&#xff1b; 内容&#xff0c;需要发布的微信正文内容&#xff1b; 截图类型&#xff0c;支持纯文字、图片&#xff08;单张、九宫格&#xff09;、分享网页/公众号文章共…

Webstorm + Egg.js 进行断点调试

Webstorm Egg.js 进行断点调试 1、在工具栏找到编辑配置&#xff0c;创建已运行Node.js 应用程序的调试配置 2、debug调试配置 3、调试 4、查看断点是否起效

【数据结构与算法】十大经典排序算法-希尔排序

&#x1f31f;个人博客&#xff1a;www.hellocode.top &#x1f3f0;Java知识导航&#xff1a;Java-Navigate &#x1f525;CSDN&#xff1a;HelloCode. &#x1f31e;知乎&#xff1a;HelloCode &#x1f334;掘金&#xff1a;HelloCode ⚡如有问题&#xff0c;欢迎指正&#…

易服客工作室:7个优质WordPress LMS线上教育系统插件比较(优点和缺点)

您是否正在为您的 WordPress 网站寻找最好的 LMS 插件&#xff1f;在线学习管理系统 (LMS) 插件允许您使用 WordPress 创建和运行类似 Udemy 的在线课程。 一个完美的 WordPress LMS 插件包括管理在线课程内容、处理订阅、运行和评分测验、接受付款等功能。 在本文中&#xf…

KMP字符串 (简单清晰/Java)

Kmp算法 解决问题&#xff1a; 字符串匹配问题 怎么解决&#xff1f; 前缀表next[]数组 #分析 先看暴力做法&#xff1a; 两层for循环&#xff0c;一层遍历文本串&#xff0c;一层遍历模式串&#xff08;子串&#xff09;对应的每个字符进行匹配&#xff0c;匹配成功就 i &a…

【前端】求职必备知识点2-CSS:优先级、盒子模型、标准流、浮动流、定位流

文章目录 CSS优先级盒子模型标准流、浮动流、定位流标准流浮动流定位流 思维导图 CSS优先级 class类选择器&#xff0c;属性选择器&#xff0c;伪类 的权值为10元素选择器、伪元素选择器权值为1 属性选择器&#xff1a;如&#xff0c;将有title的元素变为红色。 [title] { co…

Python pygame(GUI编程)模块最完整教程(8)

上一篇文章&#xff1a; Python pygame(GUI编程)模块最完整教程&#xff08;7&#xff09;_Python-ZZY的博客-CSDN博客 总目录&#xff1a; README.md Python-ZZY/Python-Pygame最完整教程 - Gitee.com 23 进阶声音操作 参考资料&#xff1a; https://pyga.me/docs/ref/…

在编程下仰望

编程的尽头是数学 数学的尽头是物理 物理的尽头是哲学 哲学的尽头是耶稣 路漫漫其修远兮&#xff0c; 各位码农同仁 好自珍重

Kafka第一课概述与安装

生产经验 面试重点 Broker面试重点 代码,开发重点 67 章了解 如何记录行为数据 1. Kafka概述 1.产生原因 前端 传到日志 日志传到Flume 传到HADOOP 但是如果数据特比大&#xff0c;HADOOP就承受不住了 2.Kafka解决问题 控流消峰 Flume传给Kafka 存到Kafka Hadoop 从Kafka…

geoserver编辑样式 【开发工具QGis的初次使用】

geoserver编辑样式 开发工具配置中文语言 geoserver样式的更改 开发工具 链接: geoserver样式style的更改 链接: QGis开发工具的安装及使用 配置中文语言 setting > options > general > 中文 geoserver样式的更改 链接: geoserver样式style的更改 利用QGIs Q…

3DMAX动力学布料模拟插件DynamoCloth使用方法

3DMAX动力学布料模拟DynamoCloth是一个&#xff08;实时&#xff09;GPU加速的3ds Max Cloth动力学插件&#xff0c;与原生Cloth修改器相比&#xff0c;性能提高了10-100倍。 3DMAX动力学布料模拟是实时的&#xff0c;能够实现实时的自然互动&#xff0c;并将创作过程从试错转…