南京大学计算机学院 智能软件工程导论 + Luciano Baresi 教授讲座
本文探讨AI时代软件工程(SE)与AI的协同发展(SE4AI与AI4SE),分析传统软件开发与AI系统的差异。重点包括:1)AI系统质量的多维评估(准确性、公平性、鲁棒性等);2)归纳思维与演绎思维的对比;3)领域自适应与扩散模型在自动驾驶测试中的应用;4)LLM生成用户故事的质量评估;5)安全设计原则(如非ML代码约束AI输出)。强调人机协作与系统化风险控制,提出通过分层保障机制(如物理熔断器)
目录
4. LLMs create user story and assess their quality 用户故事格式
智能软件工程设计目标与相关技术。
一、导言
背景:硬件(如流水线)高度自动化 已经发展很好; 但软件开发费事/容易出错(自动驾驶之类)
假设模型评估准确率95% 不知道剩下5%什么时候会发生,如何避免这样的风险和安全隐患。
SE4AI AI还是整个软件系统的一小部分 软件系统帮助AI未来研发发展
AI4SE AI帮助软件开发更快更准确 软件系统的维护依靠人 成本太高
小游戏:给大模型诗词生成图片 再反过来猜图片是什么诗词/成语
一般会在图片中出现比较重要的名词。
相关项目:少代码开发小游戏;LLM的越狱攻击 绕开价值对齐的防线;代码生成智能体;大模型生成测试用例;AI辅助的代码审查和缺陷检测。
Intelligent System 参考教材
转录软件例:输入音频/视频 输出文本;可以做录音文字整理,电影字幕生成,实时翻译
难点:效率实时性 同声传译;声纹识别(哪个人);原语音质量;兼容性 试用不同操作系统,试用不同语言,多个服务器并发,数据越来越多服务更新
二、软件工程师 与 数据科学家
软件工程师更多重在 产品的表现 稳定性 规模问题,后期维护模型;
数据科学家更多重在模型的表现与准确率accuracy。
fairness怎样公平性 肤色 种族 性别这些敏感信息,虽然数据集上体现,但需要抹去差异。
结果不好的话 一直训练导致时间损耗。
漫画:只关心结果,而不关心中间过程 黑盒形式
-
“如果答案是错的呢?” - “那就搅拌这堆东西,直到看起来对了为止。”
锐评某些缺乏科学性的模型调试方法,导致:过拟合、 陷入局部最优、引入偏见
讽刺了一种错误的工作重心:将大部分精力投入到模型调参上,而不是投入到更根本的数据理解和特征工程上。
ML只是软件系统的一小部分。
三、ISO/IEC 25010产品质量模型和8大特性
模型的多维质量至关重要
准确性 模型大小 推理延迟 学习延迟 用户交互模式 增量学习能力 可解释性 鲁棒性
功能性:评估转录正确性 错误如何处理?两次结果不一致如何处理?
传统软件 可组合性(模块化 组件化)
功能正确性需要:实现和规约一致(specification)描述作用/预期行为
转录软件的规约?难以定义学习部件正确性相关的规约,只有统计意义上的准确率,换个数据集结果可能就不一样了。(规约 这个代码我输入是什么 则输出就是什么)
四、演绎思维 与 归纳思维
人是怎么认识数据的?比如问一个小朋友这个奥特曼叫什么名字 是怎么规约的?
用传统方式很难规约 长成什么样的叫什么奥特曼。
机器学习:把奥特曼的图片打好标签训练。从例子归纳。
演绎思维(Deductive reasoning) 传统代码
逻辑上一步一步推结论 一般到具体
归纳思维(Inductive reasoning) AI模型训练 统计学习
从观察到的事实/数据出发 归纳一般规律 具体到一般
机器学习拟合数据的三个共同步骤
hypothesis class:什么结构的模型
loss function:损失函数衡量参数好坏
optimization algorithm:求解模型 优化算法
五、Luciano Baresi 教授讲座
https://baresi.faculty.polimi.it/ 教授个人主页
AI时代需不需要软件工程?软件工程如何助力实现更优的机器学习系统?
这类系统正促使软件工程师重新审视传统开发流程中的所有环节。虽然机器学习框架通常已给定,但首先需要思考如何选择并调整系统背后的模型,进而保障其输出结果的质量。这意味着需求分析必须(同时)关注新维度,系统也需以特殊方式进行设计、实现、部署、测试、配置与维护。训练过程与推理阶段需要不同的技术框架,面临不同的挑战,并需采取针对性的解决方案。例如:如何生成合适的测试用例来验证自动驾驶系统?
另一方面,机器学习专家通常聚焦于算法层面,容易低估构建完整、可扩展且健壮的系统所涉及的问题,以及系统部署与运维的复杂性。本演讲将梳理不同领域的贡献价值,强调协同效益与潜在问题,并重点展示我们为深入探讨而研发的若干解决方案。
AI困境:纯医保预测算法的结果 对人种不公平fair。
“VISION: Humans and AI are trustworthy collaborators that rapidly evolve systems based on programmer intent”
终极状态:人类和AI成为彼此值得信赖的协作伙伴,能够根据程序员的意图(而不仅仅是写出的代码)来快速地共同演进系统。这强调了人机协同和抽象层次的提升。
1. 如何定义公平性?
Understanding Fairness Requirement for Software
在开发和评估系统(特别是AI和机器学习系统)时,“公平性”不应是事后才考虑的问题,而应被视为与性能、安全性、可用性等同等重要的、需要严格设计和验证的非功能性需求。
Cluster 1: 核心功能正确性与稳定性
-
包含属性:准确性、一致性、正确性、容错性、完整性、可靠性、可重复性、可复现性。
-
解读:这是传统软件工程中最基础、最核心的质量要求。它确保系统能正确、稳定、可靠地执行其预定功能。这是所有其他质量(包括公平性)的基础。如果一个系统的结果不可靠或不正确,就根本谈不上公平。
Cluster 3 & 4: 伦理与社会责任
-
包含属性:偏见、伦理、公平性。
-
解读:这是图的核心焦点。这个簇群明确将公平性、偏见和伦理归类为非功能性需求。
-
偏见是导致不公平的主要原因。公平性是旨在消除不当偏见
-
伦理是一个更广泛的框架,公平性是其中的一个关键原则。技术决策必须与社会和伦理责任紧密结合。
-
Cluster 2: 系统效率与能力
-
包含属性:效率、性能、可扩展性。
-
解读:这些是系统在资源利用和处理能力方面的要求。它们与公平性可能存在权衡关系。例如,一个高度公平的模型可能更复杂,会导致性能下降或延迟增加。开发者需要在效率目标和公平性目标之间做出谨慎的平衡。
Cluster 5: 系统演化与通用性
-
包含属性:适应性、领域自适应、灵活性、互操作性、可移植性、可复用性。
-
解读:这些属性关乎系统能否适应变化的环境和新的场景。对于公平性而言,这至关重要。一个在训练数据上表现公平的模型,如果无法适应新的、变化的数据分布,可能会在新环境中产生新的偏见和不公平。
比较两个群体有没有 歧视偏向:某指标分别统计 差异比例有没有超过 threshold
2. 未知领域 自适应 domain adaptation
神经网络处理不同领域的数据 正确率下降(Out-Of-Distributions)
能自动检测未知领域并使神经网络自适应调整的四阶段循环:
-
首先通过不确定性估计 Uncertainty Estimation 识别模型置信度低的样本
-
通过变点检测器 Changepoint Detector 发现数据分布的变化点和新领域
-
使用风格引导的数据生成 Style-guided Data Generation 创建新领域的数据样本
-
最后通过权重自适应 Weights Adaptation 调整模型参数适应新领域
Style-guided Data Generation 内容+风格的生成
Weights Adaptation 权重自适应
Reset (Retraining from scratch) 重置(从头开始重新训练)
Partial (Retraining from trained model) 部分调整(基于已训练模型继续训练)
Fine-tuning (Retraining only last layers) 微调(仅重新训练最后几层)
Incremental Learning 增量学习
Replay Memory to Avoid Catastrophic Forgetting 重放记忆机制(避免灾难性遗忘)
3. 用扩散模型 自动驾驶测试领域增强
基于扩散模型(Diffusion Models)来增强自动驾驶系统(ADS)测试的先进方法
如何在安全、低成本的前提下,获取大量覆盖各种罕见和危险场景的测试数据。
-
要解决的问题:
-
自动驾驶系统基于深度学习模型(如语义分割、目标检测、车道保持)。
-
这些模型可能会在训练数据未充分覆盖的边缘情况下失败或表现出不可预测的行为(例如,暴雨中的障碍物、罕见车型、奇特的光照条件)。
-
在现实世界中测试这些罕见和危险场景既昂贵又极度危险。
-
-
解决方案 - Domain Augmentation:
-
使用扩散模型(如Stable Diffusion, DALL-E)作为“场景引擎”。
-
输入:基础的、常见的驾驶场景图像(作为种子)。
-
处理:通过文本提示或条件控制,让扩散模型生成符合特定要求的新图像。例如:
-
“将晴天场景改为暴雨夜间”
-
“在路中间添加一个破损的轮胎”
-
“将路边的行人换成穿着反光服的建设工人”
-
-
输出:大量属于新操作设计域的新图像,这些图像覆盖了各种天气、光照、障碍物、道路类型等组合,极大地扩展了测试的广度和深度。
-
Semantic Validation (语义验证)
生成模型有时会产生语义错误,例如:
-
结构扭曲:车道线断裂、交通标志牌变形、道路结构不合理。
-
视觉伪影:奇怪的模糊、不合理的物体边缘、光影错误。
-
逻辑错误:汽车飘在空中、树木长在马路正中间。
如果用这些有缺陷的图像来测试自动驾驶模型,测试结果将是无效的,因为问题出在测试数据本身,而非被测试的ADS模型。
Knowledge Distillation (知识蒸馏) -> 高效执行
将大型、笨重但强大的扩散模型“压缩”成一个轻量、高效的网络,以便在仿真环境中进行实时、大规模的测试,显著降低计算开销。
“Diverse Driving Scenarios”(多样驾驶场景):传统测试受限于真实数据收集的难度,很难覆盖所有的边缘案例,如极端天气(暴雨、暴雪、大雾)、罕见事件(路面出现动物、前车掉落货物)、特殊光照(眩光、夜间低光照)等。扩散模型可以有针对性地生成这些难以遇见但至关重要的场景。
“Exposes Failures”(暴露失败): 测试的目的不是证明系统有多好,而是想尽办法找到它的缺陷和边界。通过将这些生成的、具有挑战性的场景输入给自动驾驶系统(的感知模型),可以系统地测试其反应,主动发现其在哪些情况下会失效。
“CARLA”: 它是自动驾驶领域公认的、开源的、高保真的仿真模拟器。证明迁移泛化性。
4. LLMs create user story and assess their quality 用户故事格式
输入信息:向LLM提供关于产品、功能、角色(Persona)的背景信息。
要求LLM按照标准的用户故事格式(As a [role], I want to [goal], so that [benefit].)进行输出。
输出信息可以 提高效率:快速产生大量初始故事想法,打破“空白页”障碍。
人机协作 作为创意生成器;
质量检验 quality assess:
1. 逻辑性 因果等逻辑联系;
2. 可测试性 能否通过具体的测试用例进行验证 ;
3. 优先级排序是否合理
例子:人物+需求+收益好处
- LLM 生成(初始版):“As a delivery driver, I want to know the delivery address, so that I can deliver the package.”
- 优化版本:“As a long - distance truck driver transporting perishable goods, I want to receive real - time traffic and weather updates during the journey, so that I can adjust the route in advance to avoid delays and ensure the goods are delivered fresh, minimizing product loss.”
可作为智能评审助手 初步质量检查,从而让人类专家可以更专注于更深层次的业务逻辑和战略对齐问题。
5. 安全可靠的AI赋能系统
非ML代码将烘烤时长限制在一个最大持续时间:用确定性的规则来约束不确定性的ML输出,防止模型做出极端错误(过长)的预测。
系统设计者可以简单地安装一个热熔断器...纯粹的机械装置 即使所有软件(包括ML和非ML)全部失灵,即使 microcontroller(微控制器)死机,这个物理保险丝依然能发挥作用,防止最坏的情况发生。
烤面包机可能偶尔会烤焦一些面包...但它绝不会烧毁厨房。安全工程中的风险分级与接受原则。
- 功能失败:烤焦面包(可接受的商业风险)。这是ML模型错误可能带来的后果,影响用户体验和产品口碑,但问题不大。
- 安全失败:烧毁厨房(不可接受的安全风险)。这是通过多层安全设计必须完全避免的灾难性后果。
-
本质:承认AI的不完美性,但通过系统设计将风险控制在一个可接受的范围内。我们允许系统在目标功能上偶尔犯错,但绝不允许它在安全方面失效。
几层保障思想:AI 虽然有一定错误率 -> 非ML保障 -> 程序外系统的保障
风险分级,把危害限制在一定范围内。
更多推荐
所有评论(0)