学习人工智能-基础篇

news2024/12/26 22:05:42
背景

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

大家经常会听说,人工智能(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 F


input = 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 SummaryWriter


dataset = 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 output

maxpool_test = NN_MaxPool_Model()

writer = SummaryWriter("../learn/log")
step = 0
for data in dataloader:
    imgs, targets = data
    writer.add_images("input", imgs, step)
    output = maxpool_test(imgs)
    writer.add_images("output", output, step)
    step += 1


writer.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 SummaryWriter

dataset = 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 output


nn_sigmoid_mode  = NN_Sigmoid_Model()

writer = SummaryWriter("../learn/log")
step = 0

for data in dataloader:
    imgs, targets = data
    writer.add_images("input", imgs, global_step=step)
    output = nn_sigmoid_model(imgs)
    writer.add_images("output", output, global_step=step)
    step += 1

writer.close()

image.png

flattern展平

线性

全连接层

损失函数和反向传播

优化

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

搭建一个CIFAR 10 model

后记

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

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

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

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

相关文章

关于个人职业选择

职业选择,一直是个老生常谈的话题。这并不是一个容易做的决定。 让我们来看看AI怎么说。 首先是方向性的回答: 然后是一些具体的回答 我个人比较倾向于深耕网络安全。这是一个很有趣也是一个持续发展着的领域。 不知道关于这个事情你怎么看&#xff0…

案例解决Redis高并发场景带来的缓存穿透、击穿、雪崩问题(超级详细!!)

假设你的网站流量量达到亿级,传统的去查询DB势必会给DB带来巨大的压力,甚至可能有宕机的风险,接下来我就分几个阶段,来讲诉各个场景可能会给DB带来巨大压力的可能,以及优化的方案。 缓存击穿:key对应的数据…

2023年12月11日:ui界面跳转

头文件&#xff1a;Second #ifndef SECOND_H #define SECOND_H#include <QWidget>namespace Ui { class Second; }class Second : public QWidget {Q_OBJECTpublic:explicit Second(QWidget *parent nullptr);~Second(); public slots:void jump_slot(); private:Ui::S…

飞桨星河文心SDK与open interpreter构成“小天网”雏形

飞桨星河文心SDK与open interpreter构成“小天网”雏形 开放式解释器open interpreter是大模型和自然语言交互的神器&#xff0c;本项目旨在体验文心大模型为底座的open interpreter。本项目只需使用CPU环境即可运行&#xff0c;直接运行即可“运行全部Cell”&#xff0c;本项…

访问控制列表ACL学习

ACL概念 ACL: ACL 是 Access Control List&#xff08;访问控制列表&#xff09;的缩写。它是一种用于管理和控制访问权限的机制或数据结构。ACL 用于确定谁可以访问特定资源&#xff08;例如文件、文件夹、网络资源等&#xff09;以及他们可以执行的操作。ACL 通常由一系列访…

【EMNLP 2023】面向Stable Diffusion的自动Prompt工程算法

近日&#xff0c;阿里云人工智能平台PAI与华南理工大学朱金辉教授团队合作在自然语言处理顶级会议EMNLP2023上发表了BeautifulPrompt的深度生成模型&#xff0c;可以从简单的图片描述中生成高质量的提示词&#xff0c;从而使文生图模型能够生成更美观的图像。BeautifulPrompt通…

1、混合方式UI设计

1、混合方式UI设计 新建项目添加静态资源添加资源添加action添加菜单菜单栏工具栏中间编辑区域 代码添加其他组件字体和大小状态栏 添加槽函数UI设置的转到槽的手写的设置应用程序图标 代码 新建项目 MainWindow代码文件夹主窗口为 (QMainWindow) 添加静态资源 AppIcon.icoi…

【MATLAB】基于CEEMDAN分解的信号去噪算法(基础版)

代码的使用说明 【MATLAB】基于CEEMDAN分解的信号去噪算法&#xff08;基础版&#xff09; 代码流程图 代码效果图 获取代码请关注MATLAB科研小白的个人公众号&#xff08;即文章下方二维码&#xff09;&#xff0c;并回复CEEMDAN去噪 本公众号致力于解决找代码难&#xff0c;…

【C++】POCO学习总结(十二):流(文本编解码、数据压缩、文件读写流等)

【C】郭老二博文之&#xff1a;C目录 1、说明 POCO提供了多种流类&#xff0c;与标准c IOStreams兼容。 大多数POCO流类被实现为过滤器&#xff0c;这意味着它们不写入或读取设备&#xff0c;而是从它们连接的另一个流。 2、文本编解码 2.1 说明 POCO提供了用于编码和解码…

苹果文本动态高亮,滚动时候部分高亮不显示问题

很简单的需求&#xff1a; 一个文本容器固定大小&#xff0c;内容超出滚动&#xff0c;然后文本点击高亮&#xff0c;奇怪就是苹果微信打开会出现点击只会高亮能看见的区域文本&#xff0c;滚动部分不会显示&#xff0c;默认浏览器打开也不行&#xff0c;安卓没问题&#xff0…

10.RIP路由信息协议

10.RIP 网段经常产生变化的话&#xff0c;建议使用动态路由协议&#xff0c;当网段发生变化的时候会自动通告给其他路由器 它不看链路的带宽&#xff0c;只看链路中的跳数&#xff0c;只要是跳数多的&#xff0c;不管带宽有多大&#xff0c;它就认为是不好的 RIP跳数有限 …

外包干了3个月,技术退步明显。。。

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

第三节、项目支付功能实战-微信支付平台接入流程,小程序账号注册、商户注册

简介 本篇介绍小程序的注册流程、商户平台的注册流程、以及小程序和商户平台如何进行绑定。 微信小程序注册 由于项目中使用了小程序进行支付&#xff0c;所以首先来注册小程序。小程序注册网站如下&#xff1a;小程序注册地址 小程序账号注册 1、链接页面点击“前往注册”…

事务的四个特性、四个隔离级别以及数据库的常用锁

事务的四个特性、四个隔离级别以及数据库的常用锁 四大特性 事务的四大特性&#xff0c;通常被称为ACID特性&#xff0c;是数据库管理系统&#xff08;DBMS&#xff09;确保事务处理的关键属性。这四大特性分别是&#xff1a; 原子性&#xff08;Atomicity&#xff09;&#x…

银河麒麟v10系统SSH远程管理及切换root用户的操作方法

&#x1f4da;&#x1f4da; &#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; ​​ &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Linux》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还是有一…

Python基础期末复习 新手 2

虽然age 10在__init__方法中定义了一个局部变量age&#xff0c;但这个局部变量并不会影响类属性age的值。类属性是在类级别上定义的&#xff0c;不属于任何一个实例。因此&#xff0c;在创建实例s1和s2时&#xff0c;它们的age属性值都为类属性的初始值0。 尽管对类的属性值进…

1.鸿蒙应用程序开发app_hap开发环境搭建

1.下载Node.js, Javascipts的运行环境 node.js版本下载v12.18.3/https://www.cnblogs.com/txwtech/p/17865780.html 2.下载并安装DevEco Studio DevEco Studio 3.1 DevEco Studio 3.1配套支持HarmonyOS 3.1版本及以上的应用及服务开发&#xff0c;提供了代码智能编辑、低代…

coding创建远程分支。并拉取远程新分支+推送代码

进入coding ----项目----代码仓库---点击 下拉之后查看全部----创建分支 创建分支之后执行下面命令 git branch -a // 查看所有分支 这个时候发现自己创建的分支没有显示这是因为自己在远程创建了分支但是本地还没有分支 执行 git fetch命令 用于从远程仓库获取最新的提交…

day33-37-SpringBootV12(整合Spring,SpringMVC,Mybatis,日志,api测试等框架)

ssm spring --> applicationContext.xml配置文件 springmvc --> springmvc.xml配置文件 mybatis —> mybatis-config.xml配置文件 —> springboot优化了之前的框架配置,思想是约定大于配置 一、引言 1.1 初始化配置 为了使用SSM框架去开发&#xff0c;准备SSM…

SpringBootWeb请求响应之前言及状态码的详细解析

SpringBootWeb请求响应 前言 在上一次的课程中&#xff0c;我们开发了springbootweb的入门程序。 基于SpringBoot的方式开发一个web应用&#xff0c;浏览器发起请求 /hello 后 &#xff0c;给浏览器返回字符串 “Hello World ~”。 其实呢&#xff0c;是我们在浏览器发起请求…