什么是人工智能?(深度好文,带你初步了解当下最火的AI)一定要看完!

77次阅读

1. 基本概念

定义

机器学习是一门研究如何通过计算手段 , 利用经验提升自身性能的学科。

人工智能、机器学习与深度学习三者间的关系如图 1 - 1 所示

什么是人工智能?(深度好文,带你初步了解当下最火的 AI)一定要看完!

1.1 人工智能定义

努力将通常由人类完成的智力任务自动化。

1.2 机器学习定义

是一种新的编程范式 , 传统编程范式如图 1-2 所示

什么是人工智能?(深度好文,带你初步了解当下最火的 AI)一定要看完!

机器学习的编程范式

什么是人工智能?(深度好文,带你初步了解当下最火的 AI)一定要看完!

机器学习的定义 : 在预先定义好的可能性空间中 , 利用反馈信号的指引来寻找输入数据的有用表示。

这个简单的想法可以解决相当多的智能任务 , 从语音识别到自动驾驶。

一个程序可以从经验 E 中学习 , 解决任务 T, 达到性能度量值 P, 当且仅当有了经验 E 过后 , 经过 P 评判 , 程序在处理 T 时性能有所提升。(Tom Mitchell, 1998)

什么是人工智能?(深度好文,带你初步了解当下最火的 AI)一定要看完!

机器学习可以分成两部分 : 根据是否有标签

* 监督式学习 : 知道使用法则可以在输入与输出之间输出数据。

* 非监督式学习 : 当不知道结果的时候

监督式学习算法可以分成

* 回归问题

* 分类问题

非监督式学习算法

聚类

1.3 深度学习

对深度的定义

从数据中学习表示的一种数学框架 , 强调从连续的层中进行学习 , 这些层对应于越来越有意义的表示。

“深度学习”中的“深度”指一系列连续的表示层 , 数据模型中包含多少层 , 这被称为模型的 深度(depth)

图 1 -4, 一个数字分类的深度学习网络框架

什么是人工智能?(深度好文,带你初步了解当下最火的 AI)一定要看完!

深度学习 : 学习数据表示的多级方法。

深度学习从数据中进行学习时有两个基本特征 :

第一 , 通过渐进的、逐层的方式进行越来越复杂的表示 ;

第二 , 对中间这些渐进的表示共同进行学习 , 每一层的变化都需要同时考虑上下两层的需要。

强化学习 :

通过不断的试错进行学习

零基础入门人工智能 AI 是很难的 , 这里我建的了一个人工智能学习群:[672948930], 群里有我整理的一份关于 pytorch、python 基础 , 图像处理 opencv 自然语言处理、机器学习、数学基础等资源库 , 想 学习人工智能 或者转行到高薪资行业的 , 大学生都非常实用 , 无任何套路免费提供 ! 还可以 扫码加 VX领取人工智能 200G 学习资料大礼包哦 !

什么是人工智能?(深度好文,带你初步了解当下最火的 AI)一定要看完!

1.4 发展历程

20 世纪五十年代中后期 ,“连接主义”

20 世纪五十年代至七十年代 , 人工智能研究处于推理期 , 典型代表 , 逻辑理论家 , 通用问题求解

20 世纪七十年代中期 , 人工智能进入知识期

与此同时 , 基于逻辑的“符号主义”

机器学习研究划分为

* 从样例中学习

* 在问题求解和规划中学习

* 通过观察和发现学习

* 从指令中学习

20 世纪 80 年代以来 , 被研究最广的为从样例中学习 , 涵盖了监督学习与无监督学习等。

20 世纪 90 年代中期 , 统计学习 , 代表技术是支持向量机 , 与枋方法

21 世纪初 , 连接主义卷土重来 , 以深度学习为名的热潮 , 即有很多层的网络。

2. Hello World Deep Learning

观察如下一组数据

x = -1 0 1 2 3 4
y = -3 -1 1 3 5 7

发现规律 : y = 2x – 1

如果使用传统方案编程 , 很容易得出想要的结果 y 的值。

cal(int x) {return 2 * x -1;} 

现在使用 深度学习模型 来计算出 y = 2x – 1 这个算法 , 即通过机器去观察这组数据 ,

得出这个算法。

cal (int x) {深度学习模型 return y;}

为了能让该模型正常工作 , 在使用深度学习模型之前 , 必须要使用样本数据来训练该模型。

2.1 环境搭建

mkdir src python3 -m venv venv pip install tensorflow pip install numpy pip install matplotlib

2.2 代码 coading

第一步 , 导入需要的包

import tensorflow as tf import numpy as np import matplotlib.pyplot as plt

第二步 , 设置训练模型数据

# set up training data x = np.array([-1, 0, 1, 2, 3, 4], dtype=int) y = np.array([-3, -1, 1, 3, 5, 7], dtype=int) for i,c in enumerate(x): print("x = {} , y = {}".format(c, y[i])

运行结果 :

x = -1 , y = -3
x = 0 , y = -1
x = 1 , y = 1
x = 2 , y = 3
x = 3 , y = 5
x = 4 , y = 7

第三步 , 创建层

# step 1 build the layer first_layer = tf.keras.layers.Dense(units=1, input_shape=[1]) # step 2 assemble layers into model model = tf.keras.Sequential([first_layer])

神经网络的核心组件是层 , 所以创建模型中第一步就是构建层 , 层是一种数据过滤器。

每层过后就是更有用的信息。

不同的张量格式与不同的数据处理类型需要用到不同的层。

例如

简单的向量数据保存在形状为 (samples, features) 的 2D 张量中 , 通常用密集连接层来处理

序列数据保存在形状为 (samples, timesteps, features) 的 3D 张量中 , 通常用循环层 (LSTM, recurrent Layer) 来处理。

图像数据保存在 4D 张量中 , 通常用二维卷积层 (Keras 的 Conv2D) 来处理。

第四步 : 编译模型

# complie the model model.compile(loss='mean_squared_error', optimizer=tf.keras.optimizers.Adam(1))

编译模型需要三个参数 :

* 损失函数(loss function): 网络如何衡量在训练数据上的性能 , 具有多个输出的神经网络可能具有多个损失函数。

定义损失函数有一些指导原则 :

对于二分类问题 , 使用二元交叉熵损失函数

对于多分类问题 , 可以用分类交叉熵损失函数

对于回归问题 , 可以用均方误差损失函数

对于序列学习问题 , 可以用联结主义 时序分类 (CTC,connectionist temporal classification) 损失函数 , 等等。

* 优化器(optimizer): 基于训练数据和损失函数来更新网络的机器

* 在训练和测试过程中需要监控的指标 (metric)

模型是由层构成的网络 , 深度学习模型是层构成的有向无环图。

常见的网络拓扑结构如下 :

* 双分支(two-branch) 网络

* 多头 (multihead) 网络

* Inception 模块

第五步 : 训练模型

# train the model print("start training the model") history = model.fit(x, y, epochs=500, verbose=False) print("Finished training the model")

第六步 : 查看模型统计数据

# show training statistics plt.xlabel('Epoch Number') plt.ylabel("Loss Magnitude") plt.plot(history.history['loss']) plt.show()

运行结果

什么是人工智能?(深度好文,带你初步了解当下最火的 AI)一定要看完!

解释一下过拟合 (overfit) 的概念 :

机器学习模型在新数据上的性能往往比在训练数据上要差。

第七步 : 使用测试数据测试结果

# use the model predict values print(model.predict([100]))

运行结果

[[199.]]

第八步 : 查看模型权重信息

# show layer weights print("These are the layer variables: {}".format(first_layer.get_weights()))

运行结果

These are the layer variables: [array([[2.]], dtype=float32), array([-1.], dtype=float32)]

典型的 Keras 工作流程 :

(1) 定义训练数据 : 输入张量和目标张量 , 有两种方法(Sequential , API function)

(2) 定义层组成的网络(或模型), 将输入映射到目标

(3) 配置学习过程 : 选择损失函数、优化器和需要监控的指标。

(4) 调用模型的 fit 方法在训练数据上进行迭代。

3. 深度学习工作原理

机器学习是将输入映射到目标 , 这一过程是通过观察许多输入与目标示例完成的。比如 x 与 y 值。

神经网络中每层对输入数据所做的具体操作保存在该层的权重中 , 其本质是一串数字 , 由其来进行参数化。

所以权重也被称为该层的参数。在这种情况下 , 学习的意思就是找出该层的权重值 , 使得网络能够将每个示例

输入与其目标正确地一一对应。流程如图 3 - 1 所示

什么是人工智能?(深度好文,带你初步了解当下最火的 AI)一定要看完!

图 3 -1 深度学习网络由权重来参数化

问题来了 , 一个深度神经网络可能有数千万个参数 , 找到正确的取值是一项艰巨的任务。

神经网络中损失函数的定义

衡量预测值 y ' 与 预期值 之间的距离 , 算出损失值。

什么是人工智能?(深度好文,带你初步了解当下最火的 AI)一定要看完!

图 3 -2 损失函数用来衡量网络输出的质量

例如如下一个线性回归的问题

什么是人工智能?(深度好文,带你初步了解当下最火的 AI)一定要看完!

图 3 -3 数据图表 , 蟋蟀叫的声音次数与温度之间的关系

使用一根直线可以近似的描述这个每分钟叫声与温度之间的关系

什么是人工智能?(深度好文,带你初步了解当下最火的 AI)一定要看完!

事实上 , 虽然该直线并未精确无误地经过每个点 , 但针对我们拥有的数据 , 清楚地显示了鸣叫声与温度之间的关系。

只需运用一点代数知识 , 就可以将这种关系写下来 , 如下所示 :

y = mx + b

其中 : y 指的是温度 ( 以摄氏度表示 ), 即我们试图预测的值。m 指的是直线的斜率。x 指的是每分钟的鸣叫声次数 , 即输入特征的值。b 指的是 y 轴截距。

其中 :

y′ 指的是预测值 ( 理想输出值 )。b 指的是偏差 (y 轴截距 )。在一些机器学习文档中 , 它称为 w0。w1 指的是特征 1 的权重。权重与上文中用 m 表示的“斜率”的概念相同。x1 指的是特征 ( 已知输入项 )。

下标 w1x1 是一个抽象概念 , 可以用多个特征来表示更加复杂的模型。

例如有三个特征的模型可以采用以下方程来表示

y' = b + w1x1 + w2x2 + w3x3

损失值是一个数值 , 表示对于单个样本而言模型预测的准确程度。如果预测模型完全正确 , 则损失值为 0 ,

否则值越大 , 表示偏差越大。

训练模型的目标是从所有样本中找到一组平均损失“较小”的权重和偏差。

损失函数

(1) 平方损失 (L2 损失 )

定义如下 :

(真实值 – 预测到的值)2 = (y – y')2

(2) 均方误差损失 (MSE)

什么是人工智能?(深度好文,带你初步了解当下最火的 AI)一定要看完!

其中 :

(x,y) 指的是样本 , 其中 x 指的是模型进行预测时使用的特征集 ( 例如 , 温度、年龄和交配成功率 )。y 指的是样本的标签 ( 例如 , 每分钟的鸣叫次数 )。prediction(x) 指的是权重和偏差与特征集 x 结合的函数。D 指的是包含多个有标签样本 ( 即 (x,y)) 的数据集。N 指的是 D 中的样本数量。

什么是人工智能?(深度好文,带你初步了解当下最火的 AI)一定要看完!

比较两张图哪个均方误差较高

什么是人工智能?(深度好文,带你初步了解当下最火的 AI)一定要看完!

优化器的定义

深度学习利用这个操作值 , 使用优化器函数来进行对权重值进行微调。

优化器中使用了 反向传播算法, 是深度学习的核心算法, 一种利用梯度下降优化来训练一系列参数化运算链的方法。

什么是人工智能?(深度好文,带你初步了解当下最火的 AI)一定要看完!

图 3 -3 将损失值作为反馈信号来调节权重值

通过 迭代方法降低损失, 不断的更新 , 最终会得出一个越来越接近 y 的预期值。

对于回归问题产生的损失值是一个碗形 , 所以肯定可以找到一个损失最小的值。

什么是人工智能?(深度好文,带你初步了解当下最火的 AI)一定要看完!

但是通过该方法需要大量的计算资源 , 另一种方法叫做梯度下降法

梯度下降法来降低损失 , 可以减少计算的次数

什么是人工智能?(深度好文,带你初步了解当下最火的 AI)一定要看完!

可以看到 , 降低损失是由学习速率与执行的步骤决定的。

什么是人工智能?(深度好文,带你初步了解当下最火的 AI)一定要看完!

梯度下降法的第一个阶段是为 w1 选择一个起始值 ( 起点 )。起点并不重要 ; 因此很多算法就直接将 w1 设为 0 或随机选择一个值。

然后 , 梯度下降法算法会计算损失曲线在起点处的梯度。简而言之 ,梯度 是偏导数的矢量 ;

它可以了解哪个方向距离目标“更近”或“更远”。请注意 , 损失相对于单个权重的梯度就等于导数。

学习速率降低可能会导致学习时间过长。

什么是人工智能?(深度好文,带你初步了解当下最火的 AI)一定要看完!

随机梯度下降法 (SGD)

什么是人工智能?(深度好文,带你初步了解当下最火的 AI)一定要看完!

包含随机抽样样本的大型数据集可能包含冗余数据。实际上 , 批量大小越大 , 出现冗余的可能性就越高。

一些冗余可能有助于消除杂乱的梯度 , 但超大批量所具备的预测价值往往并不比大型批量高。

如果我们可以通过更少的计算量得出正确的平均梯度 , 会怎么样 ? 通过从我们的数据集中随机选择样本 , 我们可以通过小得多的数据集估算 ( 尽管过程非常杂乱 ) 出较大的平均值。

随机梯度下降法(SGD) 将这种想法运用到极致 , 它每次迭代只使用一个样本 ( 批量大小为 1)。如果进行足够的迭代 ,SGD 也可以发挥作用 , 但过程会非常杂乱。“随机”这一术语表示构成各个批量的一个样本都是随机选择的。

小批量随机梯度下降法 小批量 SGD) 是介于全批量迭代与 SGD 之间的折衷方案。小批量通常包含 10-1000 个随机选择的样本。小批量 SGD 可以减少 SGD 中的杂乱样本数量 , 但仍然比全批量更高效。

4. Keras, TensorFlow, Theano, CNTK

什么是人工智能?(深度好文,带你初步了解当下最火的 AI)一定要看完!

图 4 -1 深度学习软件栈与硬件栈

TensorFlow API 层次

什么是人工智能?(深度好文,带你初步了解当下最火的 AI)一定要看完!

零基础入门人工智能 AI 是很难的 , 这里我建的了一个人工智能学习群:[672948930], 群里有我整理的一份关于 pytorch、python 基础 , 图像处理 opencv 自然语言处理、机器学习、数学基础等资源库 , 想 学习人工智能 或者转行到高薪资行业的 , 大学生都非常实用 , 无任何套路免费提供 ! 还可以 扫码加 VX领取人工智能 200G 学习资料大礼包哦 !

什么是人工智能?(深度好文,带你初步了解当下最火的 AI)一定要看完!

什么是人工智能?(深度好文,带你初步了解当下最火的 AI)一定要看完!

原文链接:https://blog.csdn.net/m0_60721065/article/details/120740078

正文完
 
不知道
版权声明:本站原创文章,由 不知道 2023-07-04发表,共计5315字。
转载说明:声明:本站内容均来自互联网,归原创作者所有,如有侵权必删除。 本站文章皆由CC-4.0协议发布,如无来源则为原创,转载请注明出处。