AIGC背后的技术分析 | 机器学习?机器如何学习?

简介: 通过Julia的语法、函数、编译器使机器学习技术变得更加简单。

640.jpg


# 1、机器学习如何工作



通过机器学习,研究人员可以构造算法,使计算机自身能够在大量的数据中找到数学模式,而这是人类不可能做到的。想想看: 如果我问你,你怎么知道一张照片中的动物是猫还是狗,你会怎么说?你可能会看看动物的胡须、脸形和耳朵。但是,你要如何从数学模式上判断这个动物是否有胡须呢?你能写出一个数学公式获取图像的像素值,并将其转换为动物物种的分类器吗?

当然不能,因为人类几乎不可能这样做,我们以前尝试过。事实上,有一个叫作特征工程(feature engineering)的研究领域,但对于稍微复杂的任务,它完成得从来都不理想。

这就是机器学习存在的原因,它可以使计算机为我们找到这些数学公式。

就像人类从经验中学习一样,机器学习算法也是如此。你可以在一个数据集上“训练”一个机器学习算法,它将尝试“建模”该数据集,并理解从输入到输出映射的数据集中的复杂性和模式。但是,训练人类和训练机器有一个关键区别: 人类可以从少数几个样本中学习,但是机器却需要从成百上千,甚至数百万个样本中学习。

如果你要向那些从来没见过吹雪机和割草机的人口头描述它们的区别,他们一定能很好地区分它们。但是,如果你希望计算机将图像分为这两类,那么你至少需要提供数百个视觉样本,才能得到可接受的结果。

此外,训练这些算法需要很强大的计算能力,而Julia恰好比较擅长这件事。
# 2、使用Flux的样式传递



Julia提供了一个叫作Flux的包,它可以帮助你解决许多问题!Flux包的一部分被称为Metalhead project,它可以使你在计算机上使用预先训练过的机器学习算法,而不必自己训练它们。让我们来看一个例子。

首先,请打开REPL并添加以下软件包:
① Flux

② Metalhead

③ Images

④ PyCall>
以下是使用的命令:
js using Pkg Pkg.add("Flux") Pkg.add("Metalhead") Pkg.add("Images") Pkg.add("PyCall")
现在,打开一个新的Julia文件,并输入以下代码:
js Code Listing 9.1, ImageClassifier.jl using Metalhead: VGG19, preprocess, load, labels using Flux: onecold model =VGG19() class_labels =labels(model) print("Enter the name of your file: ") user_image =preprocess(load(readline())) model_prediction =model(user_image) top_class =onecold(model_prediction)\[1\] class_name =labels\[top_class\] println("I think this image contains: $(class_name)")
从数学和机器学习的角度来看,这是比较简单的工作,但因为你对此还比较陌生,所以我不会深入讲解模型本身的工作原理。然而,Julia代码非常简单,你应该可以理解此文件中的大部分代码。这就是Julia和Flux的优雅之处,你不需要编写非常复杂的代码以使用机器学习模型。

现在你可以拍一些照片,可以是你的宠物、电脑、电视或你自己,或者你可以从网上下载一张照片,将它们放在与你刚刚编写的Julia代码文件相同的目录中,然后运行该代码。

当你第一次运行该代码时,它将会从网上下载名为VGG19的机器学习模型(VGG19表示Oxford Visual Geometry Group’s 19-layer model)。根据你的网络环境,这可能需要几分钟的时间。

然而,无论你运行了多少次代码,它都会继续初始化模型。一旦模型加载后,你将看到一个请求图像文件的提示。输入文件的名称和扩展名,然后按Enter键。几秒后,代码应该会输出它在图像中看到的内容。例如,假设有一张如图1所示的称为cat.jpg的图像。

640.png


■ 图1 测试图像分类器程序的猫图像

这是我与程序之间的交互:

Enter the name of your file: cat.jpg
I think this image contains: Egyptian cat

结果非常接近,应用程序在图像中看到一只Egyptian cat。这真的很棒,但这并不是什么新鲜事,这种技术已经存在很多年了,如果你使用Apple Photos或Google Photos,你的图像会被自动分类。事实上,这些平台甚至可以自动进行面部识别,使你的生活更便捷。

那么如何用机器学习生成一些艺术作品呢?我们将使用一种称为梯度上升(gradient ascent)的技术生成DeepDream艺术作品。你可能还记得几年前的DeepDream,当时Google的研究人员可视化了“神经网络的激活”。我知道这听起来很复杂,在大多数语言中,即使是实现算法的一个简单版本也需要相当多的代码。

但在Julia中,这几乎是微不足道的。下面让我们实现一个可以获取图像并对其添加“艺术风格”的应用程序。打开一个新文件,输入以下代码:

Code Listing 9.2 DeepDream.jl
using Metalhead: VGG19,preprocess,load
using Flux: @epochs
using Statistics, PyCall, Flux.Tracker
using Images: RGB
np= pyimport("numpy")
Image = pyimport("PIL.Image")
function deprocess and pillow(img)([0.4850.4560.406][0.2290.2240.225])队,=rgb = cat(collect(map(x-> (img[::,x,1].* [x]) .+[x]1:3))..., dims= 3)rgb = np.uint8(np.interp(np.clip(rgb ./ 255-11), (-11)(0255)))
returnImage.fromarray(rgb).transpose(Image.FLIP LEFT RIGHT).Crotate(90)
end
model = VGG19().layers[1:11]
loss(x) = mean(model(x))
dloss(x) = Tracker.gradient(loss,x)[1]function calc gradient(x)g = Tracker.data(dloss(x))
return g * (mean(1.5 ./ abs.(g)) + 1e- 7)
end
print("Enter the name of your file: ")img = preprocess(load(readline()))
epochs 20 global img += calc gradient(img)deprocess and pillow(img).show()

在本例中,我不会深入讲解这段代码的工作原理,关键是让你看到使用Julia能够做些什么。

更多需要了解的内容:

从本质上说,这不是训练一个神经网络的权重,而是通过一个损失函数(loss function)找到对权重的梯度,我们通过使用一个可以使卷积神经网络中某层滤波器的均值最大化的函数找到了相对于输入的梯度。
现在,如果你再次运行该应用程序,它将加载该模型并请求你输入一个文件。这次我输入了一张自己的图像(见图2)。

640.png

■ 图2 输入DeepDream.jl的图片

我得到了如图3所示的输出。

640.png


■ 图3 DeepDream.jl生成的第一张艺术作品



哇!这是一张很棒的艺术作品。如果你将代码
js model =VGG19().layers[1:11]
改为
js model =VGG19().layers[1:end-10]
你应该会得到一张令人毛骨悚然的艺术作品

640.png


■ 图 DeepDream.jl生成的第二张艺术作品

好吧,这也太奇怪了。让我们将代码更改为

model =VGG19().layers[1:7]

现在,你应该会看到图中的图像。

640.png


■ 图 DeepDream.jl生成的第三张艺术作品

很好!关于这种艺术作品还有一些需要讲解的地方: 它不是计算机在画布上的基本图像上随机画出来的,事实上,该系统是在世界上最大的图像数据集上进行训练的,它包含超过1000个类别的100多万张图像。所以,如果你仔细观察,你可能会发现动物或其他类似于图像中描绘的物体的一些特征。例如,在生成的第二张图像中,你可能会在我的眼睛和嘴巴周围看到一些类似狗或其他动物的特征,这是因为在生成本艺术作品之前,这个系统的数据集中有很多动物。

你刚刚实现的一切都是由机器学习技术支持的,并且通过Julia的语法、函数和编译器使其变得非常简单。

目录
相关文章
|
2月前
|
搜索推荐
师资培训|AIGC在高校教学中的应用场景与案例分析-某产教科技公司
北京新大陆时代科技有限公司举办新一代信息技术名家大讲坛系列培训,旨在提升教师专业素质,加强“双师型”教师队伍建设。TsingtaoAI作为培训伙伴,提供全面支持。培训涵盖AIGC在高校教学的应用场景、教案生成及个性化教学资源定制等内容,助力提升教学质量与人才培养。
107 0
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
人工智能与机器学习:探索未来的技术边界
【10月更文挑战第18天】 在这篇文章中,我们将深入探讨人工智能(AI)和机器学习(ML)的基础知识、应用领域以及未来趋势。通过对比分析,我们将揭示这些技术如何改变我们的生活和工作方式,并预测它们在未来可能带来的影响。文章旨在为读者提供一个全面而深入的理解,帮助他们更好地把握这一领域的发展趋势。
|
16天前
|
机器学习/深度学习 传感器 运维
使用机器学习技术进行时间序列缺失数据填充:基础方法与入门案例
本文探讨了时间序列分析中数据缺失的问题,并通过实际案例展示了如何利用机器学习技术进行缺失值补充。文章构建了一个模拟的能源生产数据集,采用线性回归和决策树回归两种方法进行缺失值补充,并从统计特征、自相关性、趋势和季节性等多个维度进行了详细评估。结果显示,决策树方法在处理复杂非线性模式和保持数据局部特征方面表现更佳,而线性回归方法则适用于简单的线性趋势数据。文章最后总结了两种方法的优劣,并给出了实际应用建议。
53 7
使用机器学习技术进行时间序列缺失数据填充:基础方法与入门案例
|
18天前
|
编解码 机器人 测试技术
技术实践 | 使用 PAI+LLaMA Factory 微调 Qwen2-VL 模型快速搭建专业领域知识问答机器人
Qwen2-VL是一款具备高级图像和视频理解能力的多模态模型,支持多种语言,适用于多模态应用开发。通过PAI和LLaMA Factory框架,用户可以轻松微调Qwen2-VL模型,快速构建文旅领域的知识问答机器人。本教程详细介绍了从模型部署、微调到对话测试的全过程,帮助开发者高效实现定制化多模态应用。
|
1月前
|
机器学习/深度学习 Python
机器学习中模型选择和优化的关键技术——交叉验证与网格搜索
本文深入探讨了机器学习中模型选择和优化的关键技术——交叉验证与网格搜索。介绍了K折交叉验证、留一交叉验证等方法,以及网格搜索的原理和步骤,展示了如何结合两者在Python中实现模型参数的优化,并强调了使用时需注意的计算成本、过拟合风险等问题。
57 6
|
1月前
|
机器学习/深度学习 搜索推荐 算法
在数字化时代,推荐系统成为互联网应用的重要组成部分,通过机器学习技术根据用户兴趣和行为提供个性化推荐,提升用户体验
在数字化时代,推荐系统成为互联网应用的重要组成部分,通过机器学习技术根据用户兴趣和行为提供个性化推荐,提升用户体验。本文探讨了推荐系统的基本原理、常用算法、实现步骤及Python应用,介绍了如何克服数据稀疏性、冷启动等问题,强调了合理选择算法和持续优化的重要性。
73 4
|
1月前
|
机器学习/深度学习 自然语言处理 语音技术
探索机器学习中的自然语言处理技术
【10月更文挑战第38天】在本文中,我们将深入探讨自然语言处理(NLP)技术及其在机器学习领域的应用。通过浅显易懂的语言和生动的比喻,我们将揭示NLP技术的奥秘,包括其工作原理、主要任务以及面临的挑战。此外,我们还将分享一些实用的代码示例,帮助您更好地理解和掌握这一技术。无论您是初学者还是有经验的开发者,相信您都能从本文中获得宝贵的知识和启示。
41 3
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
思通数科AI平台在尽职调查中的技术解析与应用
思通数科AI多模态能力平台结合OCR、NLP和深度学习技术,为IPO尽职调查、融资等重要交易环节提供智能化解决方案。平台自动识别、提取并分类海量文档,实现高效数据核验与合规性检查,显著提升审查速度和精准度,同时保障敏感信息管理和数据安全。
123 11
|
1月前
|
机器学习/深度学习 数据可视化 算法
机器学习中的特征选择与降维技术
机器学习中的特征选择与降维技术
77 0
|
3月前
|
机器学习/深度学习 数据可视化 JavaScript
探索机器学习模型的可视化技术
【9月更文挑战第23天】在数据科学中,理解和解释机器学习模型的决策过程是至关重要的。本文将介绍几种流行的可视化工具和库,如TensorBoard、D3.js等,帮助读者更好地理解模型内部工作原理及其预测结果。通过实例演示如何使用这些工具进行模型可视化,增强模型的可解释性。