说点没用的

一转眼,上次写播客还是年终总结,已经 11 个月过去了,23 年底,我规划了 3 个目标,目前 1 个已经实现,其余的两个很快也会搞定。那么整年目标就已经完成了。再还没有完成的时候我就可以开香槟了,因为实现的目标是最重要的,其他的两个可有可无,即使延期也无所谓。

正文

从软件开发模式开始

今年再准备软考,所以经常记忆知识点有一个软件设计和开发的方法叫做 「自顶向下,逐步细化」。这个知识点,不仅是考试要考,在我们开发也是随时在用的东西。一个项目或者一个功能来了,我们就要开始规划,第一步就是总体目标是什么,然后通过这个整体目标,我们会规划出来模块或者功能点,然后在逐步实现这些东西,后续围绕这个目标,不断的优化。这是一个迭代的过程,注意这个迭代,在后面我们会不断的重复这个词。下面我从 AI 给我的答案中,贴出一些 「自顶向下,逐步细化」 的概念。

  1. 自顶向下的核心思想 从全局或系统的整体角度出发,先定义最核心、最抽象的系统目标和功能。 将这些整体目标逐步分解为子目标,直到可以实现为具体的模块、功能或代码。 这种方法强调 先全局、后局部,先抽象、后具体。
  2. 具体步骤 定义系统的整体结构:

明确系统的核心需求和目标。 确定主要模块或功能的边界及其交互关系。 逐步分解模块:

将大的模块或功能分解成小的子模块。 每个子模块只负责一部分功能,且相对独立。 递归细化:

对每个子模块继续分解,直到达到可以直接实现的粒度。 这通常意味着定义具体的类、函数或接口。 实现底层细节:

从最底层(具体的代码实现)开始逐步开发。 确保每个模块按照上层设计的需求运行。

  1. 优势 清晰的设计思路:从整体到细节的过程帮助开发人员对系统有一个全局的认识,避免局部优化导致的全局问题。 易于管理复杂性:将复杂问题逐步分解,减少直接面对全局复杂性的压力。 有助于协作开发:顶层设计确定后,可以并行分工完成子模块的实现。 降低错误风险:分解后每个子模块简单且独立,错误更易定位和修复。

  2. 应用场景 软件架构设计:例如分层架构中的分解(表示层、业务逻辑层、数据层)。 算法设计:例如在解决一个问题时,先设计主要步骤,再逐步细化每一步。 项目规划:制定高层目标后,逐步分解为具体的任务清单。

  3. 一个简单的例子 以开发一个“图书管理系统”为例:

顶层设计:

核心功能:书籍管理、借阅管理、用户管理。 模块分解:

书籍管理模块:添加书籍、删除书籍、查询书籍。 借阅管理模块:借书、还书、查看借阅记录。 用户管理模块:用户注册、登录、权限分配。 逐步细化(以书籍管理为例):

查询书籍:根据书名、作者、类别等条件查询。 添加书籍:定义输入字段(书名、作者、ISBN 等),并校验格式。 实现具体功能:

编写代码实现数据库操作和界面逻辑。

  1. 与其他方法对比 自顶向下 vs. 自底向上: 自顶向下:从全局入手,逐步细化。 自底向上:从实现底层组件开始,逐步组合成完整系统。 实际开发中,通常结合使用两者,称为“混合方法”。

总结:自顶向下逐步细化是一种强调 全局视野 和 系统分解 的方法,非常适合处理复杂系统的设计与开发,同时确保开发过程有条不紊。

上面的一大堆,我总结的一段话,就是:有了目标后,围绕这个目标,逐步分解要做的事情,一直分解到每一步都可以很简单的实现。然后 do it。

AI 绘图

然后,我就突然想到,这跟我理解的 AI 绘图极其相似,AI 绘图不也是根据关键词,先出一个大框,然后在逐步丰富细节,最后输出为一个我们人类可以看懂跟我们的关键字词是否相似的图片么,然后我又去问了 AI 「AI 绘图的原理」,

  1. 数据驱动的学习 AI绘图依赖于大量的图像数据和对应的标签(如描述、风格等)。模型通过学习这些数据中的模式和特征来生成新图像。

数据来源:包括照片、手绘、数字艺术等。 特征提取:模型学习图像中的颜色、纹理、形状、构图等特征。

  1. 深度学习模型的核心技术 AI绘图常用以下几类模型:

(1) 生成对抗网络(GAN, Generative Adversarial Networks) 工作原理: GAN由两个神经网络组成:生成器(Generator)和判别器(Discriminator)。 生成器尝试从随机噪声中生成图像;判别器尝试区分生成的图像和真实图像。 通过对抗训练,生成器不断改进,最终生成逼真的图像。 应用场景:风格迁移、超分辨率、虚拟角色生成等。

(2) 扩散模型(Diffusion Models) 工作原理: 扩散模型通过在原始图像上添加噪声,模拟逐步破坏图像的过程。 训练一个神经网络,学习如何逆转这种过程,从纯噪声生成高质量图像。 其生成过程可以理解为“从噪声中重建图像”。 特点:近年来在文本生成图像任务中表现尤为出色(如Stable Diffusion、DALL·E)。

(3) 变分自编码器(VAE, Variational Autoencoders) 工作原理: VAE将图像压缩成潜在空间的分布,再从该分布中采样并重建图像。 生成图像时,直接从潜在空间采样,然后解码成图像。 特点:生成图像的多样性较高,但细节不如GAN和扩散模型。

通过上面这句,可能我所理解的 AI 绘图的原理更像是扩散模型的工作方式(当然我也不知道我理解的对不对)。不过不管我理解的怎么样,通过下面这段的解释,我相信我自己的理解方式,软件开发和 ai 绘图的某种解决方案,两者的方式极其相似

  1. 关键步骤总结 数据准备:大量图像数据集用于训练模型。 模型训练:基于深度学习的生成模型学习数据中的分布。 生成过程:从随机噪声或文本描述中生成图像。 后处理:对生成的图像进行优化和修正,提高细节质量。
  2. 典型应用 艺术创作:如生成抽象画、漫画角色、数字插画。 影视制作:如生成虚拟场景、特效图像。 工业设计:如生成产品设计草图。 游戏开发:如自动生成游戏中的角色和背景。 教育与研究:如图像增强、模拟数据生成。
  3. 优势与局限性 优势: 能快速生成高质量图像,降低创作门槛。 可实现高度定制化(风格、内容)。 持续改进模型可以提高生成图像的多样性和真实感。 局限性: 对高质量训练数据的依赖性较强。 难以生成具有复杂逻辑的图像(如需要严格空间关系的场景)。 潜在的版权和伦理问题(如生成模仿特定艺术家的风格)。 总结:AI绘图的核心在于对图像特征的学习与重建,通过深度学习技术结合生成模型,实现了从噪声或文本到图像的转化,开辟了艺术与创作的新领域。

这里面,长提到了“噪声”,我当下不是很理解是什么意思,后续我会在我理解的时候再具体说说这个东西。

让 AI 告诉我们我上面理解的是否正确

于是,我问了 AI 下面的问题「软件开发自顶向下逐步细化与 ai 绘图的方式有什么共通性」。大段的文本我就不贴了,我把总结贴上来

总结:共通性

从全局到局部:两者都以整体需求为出发点,逐步细化到具体实现。

逐层迭代优化:通过分层次处理和反复迭代,逐步完善细节。

全局一致性控制:无论是软件功能还是图像特征,都需要始终保持整体设计的一致性。

模块化与分离关注点:将复杂任务拆解为可管理的子问题,并通过清晰的接口进行协作。

结合反馈机制:通过底层结果反作用于高层设计,形成动态的优化过程。

尽管软件开发和AI绘图应用场景不同,它们在解决复杂问题时都遵循类似的逻辑框架,即从抽象到具体、从全局到局部,以实现目标的精确和高效。

看起来,我的理解似乎没什么问题。但是这里又引出了一个新的问题「我所提出的问题是否会对 AI 产生结果的干扰?」后续在我研究明白以后,我依然会写一个这部分的文章

思维发散 小说 美妆

当我理解的东西没什么大的错误后,我的思维开始发散了,我又想到了小说,想到了美妆,这两个不是也跟我们软件开发很相似么?对了,也许有人会说为什么全文没提建筑,因为我记得我在哪本书看到过,软件开发其实很多都是从建筑相关的概念来的。所以我思维也不会主动的往那边思考。

小说:先有大纲->地图规划,角色设计。。。-> 章节规划->成文-> 润色 美妆:打底->眼部、脸部、嘴部大框设计->眼线、眼影、阴影、口红逐步丰富细节->妆造完毕。

PS:上面两个我完全不不懂,小说我是看过相关文章,化妆我是看我媳妇,以及偶尔听到她化妆教程我自己总结的。

当然 AI 也给了我答案。

化妆、小说创作、软件开发和AI绘图的共通性在于:

从整体到局部的细化:逐层展开创作或开发。 模块化与分离关注点:通过分解任务,降低复杂度。 迭代优化:通过反复调整实现最佳效果。 全局一致性:确保每一步都服务于整体目标。 抽象到具体:从创意或需求到实际作品的转化。 创造性与技术性的结合:将艺术与技术结合,完成表达与实现。 这种相似性体现了在不同领域中,解决复杂问题的通用思维方式。

总结

上学的时候,我的老师跟我说,当能够把知识的共通性有所理解,并且能产生链接甚至代入到生活中,这个知识就算学会了学活了。如果再能讲给别人并让别人也理解,那么就足够了。我觉得我把软件开发到美妆链接了,学活了,在输出这篇文章,那么也达到了足够了的程度。最后我做个总结吧

其实,我们在现实中很多事情,都是可以做下面的规划的,可能你正在做但没有意识到

  1. 将复杂问题拆解为可管理的部分: 这部分很难,当有一个目标以后,如何迈出第一步是很难的,很多人经常在这一步就麻了,我该怎么做?其实就是没把这一步做好,拆解任务,一直拆解到可以实施就是指每次完成一个简单的任务就会很清晰并且易于做了
  2. 迭代优化与反馈:这一步就是优化我们在规划过程中一些细节没有考虑到,或者规划有问题的情况,即使进行纠正和优化,切记不转南墙不回头万万不可取
  3. 保持全局一致性:这一步我理解就是在对第二部进行一些约束,扩展和发散都是可以的,但是不能跑偏脱离主体
  4. 从抽象到具体: 一个想法形成了这篇文章。