当前位置:   article > 正文

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

讲讲你理解的人工智能

1. 基本概念

定义

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

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

1.1 人工智能定义

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

1.2 机器学习定义

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

机器学习的编程范式

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

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

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

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

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

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

监督式学习算法可以分成

* 回归问题

* 分类问题

非监督式学习算法

聚类

1.3 深度学习

对深度的定义

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

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

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

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

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

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

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

强化学习:

通过不断的试错进行学习

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

1.4 发展历程

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

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

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

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

机器学习研究划分为

* 从样例中学习

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

* 通过观察和发现学习

* 从指令中学习

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

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

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

2. Hello World Deep Learning

观察如下一组数据

x =-101234
y =-3-11357

 发现规律: y = 2x - 1

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

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

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

得出这个算法。

  1. cal (int x) {
  2. 深度学习模型
  3. return y;
  4. }

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

2.1 环境搭建

  1. mkdir src
  2. python3 -m venv venv
  3. pip install tensorflow
  4. pip install numpy
  5. pip install matplotlib

2.2 代码coading

第一步,导入需要的包

  1. import tensorflow as tf
  2. import numpy as np
  3. import matplotlib.pyplot as plt

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

  1. # set up training data
  2. x = np.array([-1, 0, 1, 2, 3, 4], dtype=int)
  3. y = np.array([-3, -1, 1, 3, 5, 7], dtype=int)
  4. for i,c in enumerate(x):
  5. 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

第三步, 创建层 

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

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

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

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

例如

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

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

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

第四步: 编译模型 

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

编译模型需要三个参数:

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

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

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

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

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

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

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

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

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

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

* 双分支(two-branch) 网络

* 多头(multihead)网络

* Inception 模块

第五步:训练模型  

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

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

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

运行结果

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

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

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

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

运行结果

[[199.]]

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

  1. # show layer weights
  2. 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所示

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

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

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

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

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

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

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

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

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

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

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)

其中: 

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

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

优化器的定义

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

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

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

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

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

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

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

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

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

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

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

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

随机梯度下降法(SGD)

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

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

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

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

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

4. Keras, TensorFlow, Theano, CNTK

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

TensorFlow API 层次

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

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/361512
推荐阅读
相关标签
  

闽ICP备14008679号