学习人工智能-基础篇

背景

随着大模型的火爆,人工智能再次被推到高潮,其实它在众多行业领域已经落地很多应用,并给社会带来了巨大的经济价值。其中包括互联网、教育、金融、医疗、交通、物流等等。在测试领域也有一些落地的案例,作为测试人员,有必要去了解并学习人工智能,去挖掘人工智为测试领域解决痛点问题,例如自动化测试用例自动生成、视觉自动化测试、缺陷预测、智能的精准测试等等。

大家经常会听说,人工智能(ArtificialIntelligence,AI)、机器学习(MachineLearning,ML)、深度学习(DeepLearning,DL),但是他们三者是一个什么关系呢,概括来讲,人工智能、机器学习、深度学习覆盖的技术范围是逐层递减的。机器学习是人工智能的一种实现方式,深度学习又是机器学习中最热门的一个分支,并且它可以代替大多数的传统机器学习的算法。

什么是人工智能

人工智能(ArtificialIntelligence,AI)是最宽泛的概念,是用于研发模拟、延伸和扩展人的智能的理论、方法、技术及系统的一门新的技术科学。对于这个定义只阐述了目标,但是没有限定的方法,因此实现人工智能存在诸多的方法和分支。机器学习(MachineLearning,ML)是实现人工智能的一种有效的方式,深度学习(DeepLearning,DL)是机器学习算法中最重要的一个分支,并且它可以替代大多数传统机器学习的算法。

什么是机器学习

关于机器学习的定义,此处引用两位
第一位是人工智能先驱亚瑟·塞缪尔(Arthur Samuel),他在1959年创造了“机器学习”一词[1]。塞缪尔认为,所谓机器学习是指:计算机能够具备根据现有数据构建一套不需要进行显示编程的算法模型来对新数据进行预测的能力。这里所谓不需要进行显示编程是区别于传统程序算法需要人为指定程序的执行过程。

第二位是卡内基梅隆大学的计算机科学家汤姆·迈克尔·米切尔(Tom Michael Mitchell),他给出了一个相较于塞缪尔更加正式与学术的定义。米切尔认为,如果计算机程序能够在任务T中学得经验E并且通过指标P来进行评价,同时根据经验E还能够提升程序在任务T的评价指标P,那么这就是机器学习[2]。这段话对于初学者来说稍微有点拗口,其实际想要表达的就是,如果一个计算机程序能够自己根据数据样本学习获得经验并逐步提高最终的表现结果,那这个过程就被称为是机器学习。

区别于人工智能,机器学习、尤其是监督学习则有更加明确的指代。机器学习是专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构,使之不断改善自身的性能。这句话有点“云山雾罩”的感觉,让人不知所云,下面我们从机器学习的实现和方法论两个维度进行剖析,帮助读者更加清晰地认识机器学习的来龙去脉。

2.1 机器学习的实现
2.1
机器学习的实现可以分成两步:训练和预测,类似于归纳和演绎:

归纳:就是从具体案例中抽象出一般规律,如同机器学习中的训练,从一定数量的样本中(已知模型输入X和模型输出Y),学习输出Y和输入X的关系,类似于某种表达式。

演绎:从一般规律推导出具体案例的结果,如同机器学习中的预测,基于训练得到的Y和X之间的关系,如果出现新的输入X,计算出输出Y,当通过模型计算的输出Y和真实场景的输出一致时,就说明模型就是有效的,如果出现过拟合或者欠拟合的情况下,我们可能需要替换其他的模型算法,继续训练模型。

2.2 机器学习的方法论

机器学习的方法论和人类科研的过程有着异曲同工之妙,下面以“机器从牛顿第二定律实验中学习知识”为例,帮助读者更加深入理解机器学习(监督学习)的方法论本质,即在“机器思考”的过程中确定模型的三个关键要素:假设、评价、优化。
包括 监督学习、无监督学习、半监督学习

例如一个房价的预测

什么是深度学习

深度学习(Deep Learning)(也称为深度结构学习【Deep Structured Learning】、层次学习【Hierachical Learning】或者 深度机器学习【Deep Machine Learning】)是一类算法集合,是机器学习的一个分支。它是基于多层神经网络,借鉴人脑神经元的结构,设计出神经网络模型,在图像识别、绘画识别和对象侦测领域,预测数据准确性有较高的表现。
image.png
图(a)展示了神经网络基本单元-感知机的设计方案,其处理信息的方式与人脑中的单一神经元有很强的相似性;图(b)展示了几种经典的神经网络结构,类似于人脑中多种基于大量神经元连接而形成的不同职能的器官。

对于深度学习,可以在TensorFlow的playground场进行体验,它是一个通过网页浏览器训练的简单神经网络并实现可视化训练过程的工具
http://playground.tensorflow.org

如图是一个逻辑回归分类模型,通过训练,把数据分为两类。增加的每一个节点就是一个神经元,还有增加一层层的深度。

image.png

从图中可以看出,所谓深度学习其实就是将原始特征通过多层神经网络进行抽象特征提取,然后再将提取到的特征输入到最后一层进行回归或者分类处理的过程,核心就是:特征提取。

什么是卷积神经网络

深度学习模型中典型的就是卷积神经网络(convolutional neural network,CNN)。它主要应用是在图像识别方向。还有一个模型是循环神经网络(Recurrent Neural Network,RNN),通常用于自然语言的处理。本文介绍的是卷积神经网络。生成对抗网络、强化学习。
在早期的图像分类任务中,通常是先人工提取图像特征,再用机器学习算法对这些特征进行分类,分类的结果强依赖于特征提取方法,往往只有经验丰富的研究者才能完成.

在这种背景下,基于神经网络的特征提取方法应运而生

卷积神经网络是目前计算机视觉中使用最普遍的模型结构。
卷积神经网络分为:输入层、卷积层、池化层、激活层、全连接层

输入层(Input Layer)、卷积层(CONV Layer)、池化层(Pooling Layer)、ReLU激活层(ReLU Layer)、全连接层(FC Layer)五个层次。

实践Pytorch框卷积神经网络

目前常用的深度学习框架有TensorFlow和PyTorch,TensorFlow
当然,现今任何一个深度学习框架都有其缺点,PyTorch也不例外,对比TensorFlow,其全面性处于劣势,目前PyTorch还不支持快速傅里 叶、沿维翻转张量和检查无穷与非数值张量;针对移动端、嵌入式部署以及高性能服务器端的部署其性能表现有待提升;其次因为这个框 架较新,使得他的社区没有那么强大,在文档方面其C库大多数没有文档。

下面结合图像和代码介绍每一层的含义。

接下来需要安装环境,对于环境的安装,因篇幅原因,不在此介绍,可以到我的博客中查看安装步骤。

安装Anaconda

安装Pytorch及配置Pycharm

我们可以从官网查看详细的可以看官网 https://pytorch.org

输入层
卷积层

如图是一个卷积操作,它的计算方式是
image.png
输入图像55的矩阵
卷积核3
3的矩阵
Stride=1
1*1
接下来我们使用Pytorch框架用代码来实现。

import torch
import torch.nn.functional as Finput = torch.tensor([[0, 0, 75, 80, 80],[0, 75, 80, 80, 80],[0, 75, 80, 80, 80],[0, 70, 75, 80, 80],[0, 0, 0, 0, 0]])# 卷积核
kernel = torch.tensor([[-1, -2, -1],[0, 0, 0],[1, 2, 1]])# 进行尺寸变换:
input = torch.reshape(input, (1, 1, 5, 5))
kernel = torch.reshape(kernel, (1, 1, 3, 3))# 进行卷积,移动步长为1(左移和下移都为1,默认是先右移后下移)
output = F.conv2d(input, kernel, stride=1)
print(output)

运行后的结果:
image.png

池化层

池化层的作用,
最大池化的目的:保留数据特征,同时能把数据量减少

import torch
import torchvision
from torch import nn
from torch.nn import MaxPool2d
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriterdataset = torchvision.datasets.CIFAR10("./7dataset", train=False, download=True,transform=torchvision.transforms.ToTensor())
dataloader = DataLoader(dataset, batch_size=64)class NN_MaxPool_Model(nn.Module):def __init__(self):super(NN_MaxPool_Model, self).__init__()self.maxpool1 = MaxPool2d(kernel_size=3)def forward(self, input):output = self.maxpool1(input)return outputmaxpool_test = NN_MaxPool_Model()writer = SummaryWriter("../learn/log")
step = 0
for data in dataloader:imgs, targets = datawriter.add_images("input", imgs, step)output = maxpool_test(imgs)writer.add_images("output", output, step)step += 1writer.close()
print("运行完毕")

这个是池化前的输入图像
image.png
这是池化后的输出图像
image.png

经过池化后图像可以隐约的看出是之前的,它的目的是保存数据的特征,但是大大减少了数据量,是训练速度加快,所以一般在卷积之后来一层最大池化。

如果在运行过程中因为网络原因,可能会出现【Pytorch】下载CIFAR10数据集报错:
urllib.error.URLError: <urlopen error name: https>
image.png
因篇幅不在此处展开,可以看我的博客中的查看具体的解决办法,
下载CIFAR10数据集报错

激活层

非线性激活函数
非线性激活,非线性的主要目的就是给我们的网络引入一些非线性特征,非线性越多,越能训练出符合各种曲线或者说是符合各种特征的模型。

import torch
import torchvision
from torch import nn
from torch.nn import Sigmoid
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriterdataset = torchvision.datasets.CIFAR10("./7dataset", train=False,transform=torchvision.transforms.ToTensor(), download=True)dataloader = DataLoader(dataset, batch_size=64)# 创建神经网络
class NN_Sigmoid_Model(nn.Module):def __init__(self):super(NN_Sigmoid_Model, self).__init__()self.sigmoid1 = Sigmoid()def forward(self, input):output = self.sigmoid1(input)return outputnn_sigmoid_mode  = NN_Sigmoid_Model()writer = SummaryWriter("../learn/log")
step = 0for data in dataloader:imgs, targets = datawriter.add_images("input", imgs, global_step=step)output = nn_sigmoid_model(imgs)writer.add_images("output", output, global_step=step)step += 1writer.close()

image.png

flattern展平

线性

全连接层

损失函数和反向传播

优化

经过卷积层的计算后,还要经过 池化层 激活层,最后
卷积神经网络是计算机视觉使用最普遍的模型结构,主要模块包括:
- 卷积
- 池化
- 激活函数层
- 和全连接层
- 线性层
- flattern展平
- 线性
卷积是深度学习的重要技术之一,简单点来说就是先通过多层的全连接进行特征提取,然后通过softmax层进行分类。

搭建一个CIFAR 10 model

后记

本文主要介绍了关于机器学习、深度学习的一些基本定义,本文介绍的也只是冰山的一角,后续会有一些深度学习训练的实例。保持持续学习,学习新的技术,拥抱大模型时代。

参考资料:
《跟我一起学机器学习 》
Pytorch深度学习快速入门教程

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WooCommerce商城个人微信支付网关 适合个人微信收款

点击获取WooCommerce商城个人微信支付网关 适合个人微信收款原文https://gplwp.eastfu.com/product/woocommerce-ge-ren-wei-xin-zhi-fu-wang-guan-shi-he-ge-ren/ 个人微信支付网关接口,无需提现,100%资金安全,官方清算,金额无限…

STM32F407-14.1.0-01高级定时器简介

TIM1 和 TIM8 简介 高级控制定时器(TIM1 和 TIM8)包含一个 16 位自动重载计数器,该计数器由可编程预分频器驱动。 此类定时器可用于各种用途,包括测量输入信号的脉冲宽度(输入捕获),或者生成输出…

软件运行原理 - 内存模型 - 栈内存

说明 C/C软件运行时,内存根据使用方式的不同分为堆内存和栈内存,栈内存使用有以下特征: 栈内存使用(申请、释放)由系统自动分配和释放,程序员不用做任何操作。栈内存重复使用,进入函数时数据入…

vscode汉化

安装插件 Chinese (Simplified) (简体中文) Language Pack for 重新打开,若还是没有汉化: 【CtrlShiftp】 输入“configure display language”,回车键 选择刚刚安装的 中文(简体)

Oracle(2-15)RMAN Incomplete Recovery

文章目录 一、基础知识1、The Procedure 不完全恢复步骤2、UNTIL TIME Example 基于时间的恢复3、UNTIL SEOUENCE Example 基于序列的恢复 二、基础操作1、不完全恢复准备工作2、不完全恢复开始恢复 RMAN Incomplete Recovery RMAN的不完全恢复 目标: 使用“UNTIL T…

使用MFC实现数据输出真的好方便(C++)

void CMFCApplication1Dlg::OnEnKillfocusEdit1() { //失去焦点就在上部的框显示 CString cont; GetDlgItemTextW(IDC_STATIC2, cont); cont L"你好啊\n"; SetDlgItemTextW(IDC_STATIC2,cont); // TODO: 在此添加控件通知处理程序代码 }

Breach 1.0

靶机环境 该靶机的ip地址配置的是静态IP地址,192..168.110.140 因此我们直接利用仅主机模式,配置为网段192.168.110.0/24网段即可! kali攻击机上配置两个网卡!一个用于访问靶机,另一个网卡适用于出网! 信…

JVM性能调优

遇到以下情况,就需要考虑进行JVM调优了: Heap内存(老年代)持续上涨达到设置的最大内存值; Full GC 次数频繁; GC 停顿时间过长(超过1秒); 应用出现OutOfMemory 等内存异常…

力扣111. 二叉树的最小深度

给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明:叶子节点是指没有子节点的节点。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:2 示例 2: 输入…

使用pe安装windows操作系统

一、系统安装前准备工作,制作系统盘 (1)拷贝电脑上的资料 (2)准备一个至少8G的U盘 (3)下载windows镜像文件及pe软件 通过百度网盘可下载下列软件及镜像 windows镜像文件(百度网盘…

Leetcode刷题笔记题解(C++):LCR 121. 寻找目标值 - 二维数组

思路:从左小角或者右上角开始遍历,假设右上角开始遍历,如果当前值大于目标值则列-1;如果当前值小于目标值则行1,以此遍历来查找目标值;注意col和row的选取 class Solution { public:bool findTargetIn2DPl…

Kalman滤波、扩展Kalman滤波、无迹Kalman滤波和异步滤波的原理及其Matlab代码

目录 引言Kalman滤波代码及其结果展示 扩展Kalman滤波代码及其结果展示 无迹Kalman滤波无迹变换无迹Kalman滤波代码及其结果展示 异步无迹Kalman滤波原理代码及其结果展示 引言 本文给出了Kalman Filter(卡尔曼滤波)、Extended Kalman Filter&#xff0…