保持人类参与:打造更安全的全天候人工智能代理

一、AI 智能体正在快速走出研究实验室,进入真实的业务运作

AI 智能体正在迅速从研究实验室走向真实世界的业务运营。
这些自治程序——本质上是“具备工具使用能力增强的大型语言模型(LLMs)”——承诺可以 24/7 全天候工作,覆盖从客户支持、IT 维护到金融交易等任务。
潜在收益极其巨大,但如果在缺乏监督的情况下把系统“钥匙”交给 AI 智能体,风险也同样很高。
仅仅因为一个智能体能够全天候独立行动,并不意味着它就应该在没有任何人工核查的情况下这么做。
在本文中,我们将探讨:为什么即便最聪明的 AI 智能体,在缺少“人工审批在环”时仍是不完整的;以及如何通过审慎的权限隔离与监督,让自治智能体更安全、更可信。
我们也会介绍一种可行路径(以 Peta 为例),展示如何以实用、可扩展的方式为 AI 智能体引入“人类在环”控制——并且不会把本文写成广告。
我们的目标是理解:如何在生产环境拥抱 AI 智能体,同时在关键处保留人类判断。


二、自治 AI 智能体的崛起(以及它们的局限)

AI 智能体是利用 AI(通常是 GPT 或 Claude 这样的 LLM)来感知信息、做出决策并采取行动以实现目标的软件程序。
随着 AI 的最新进展,现在已经可以把这些智能体连接到各种工具与服务——数据库、API、网页浏览器等等——从而让它们代表我们执行任务。
我们已经在各行业看到示例:金融领域的自动化交易机器人、分诊 IT 告警的 AI 助手、撰写客服回复的客户服务智能体,等等。
在不久的将来,许多公司很可能会依赖“成群的智能体”全天候运行:它们能在夜间维持业务流程运转,并以人类劳动者无法企及的时间与规模参与经济活动。

然而,今天的 AI 智能体远谈不上万无一失。
它们基于数据模式与指令运作,却缺乏真正理解,因此会犯出人意料的错误。
任何用过 LLM 的人都见过它“幻觉”出错误事实,或误解请求的情况。
现在想象一下:把这种能力装进一个“有行动权”的自治智能体里——一个困惑的 AI 可能发出错误指令、改错数据库条目,或误判关键局势。
与人类员工不同,AI 智能体并不会天然知道自己即将做出明显有害或荒谬的事情——除非我们明确给它编入防护措施。
尽管很强大,当代 AI 智能体并没有真正的常识或伦理判断,它们只具备我们试图通过训练灌输的那一点“准则”。
这意味着:对于开放式的自治运行,AI 智能体单独上阵仍然不可靠。

更关键的是,AI 智能体也缺少人类那种“责任感与情境意识”。
它们不承担后果责任,也无法总是预见自身行动在动态现实世界中的更广泛影响。
例如,一个交易智能体可能因为预测到利润而决定大量买入股票,但它不会像人类那样对潜在市场冲击或突破交易限额感到恐慌。
一个 AI IT 助手可能试图优化服务器配置,却因为没意识到某进程是关键任务而意外关停核心服务。
这些场景揭示了一个简单事实:如果让 AI 智能体以完全自治方式运行,我们必然会遇到事故——有些只是令人不便,有些则可能是灾难性的。


三、为什么“人类监督”仍然不可或缺

基于这些局限,很明显:要负责任地部署 AI 智能体,人类监督至关重要。
我们希望 AI 智能体承担繁重与重复劳动,但不希望它在高风险决策上覆盖人类判断。
在实践中,这意味着:对某些动作,把“人工审批”这一步嵌入智能体工作流。
在 AI 智能体执行不可逆或敏感操作之前——比如删除数据库、发送公司级告警、或转移资金——理想情况下应让人类有机会审核、确认或否决。

为什么这如此重要?主要原因包括:

1、防止高代价错误(Preventing Costly Mistakes)
人类能捕捉明显错误或危险动作,而缺少真实世界经验的 AI 可能意识不到。
人类在环可以说:“等等,这看起来不对。”
相反,没有监督的智能体可能直接推进。
例如:你真的希望 AI 智能体在没有任何人工介入的情况下,自动买入大量股票或发起巨额资金转账吗?
多数人都会希望自己能对这种决策有发言权。
人工审批提供了一个“理智校验”(sanity check)。

2、缓解安全风险(Mitigating Security Risks)
如果 AI 智能体被攻破或行为异常,对敏感动作要求明确人工审批就是安全网。
即便攻击者设法操纵了 AI,他们也会在最终一步被“必须由真人批准”的机制挡住。
换句话说:智能体——或劫持它的人——无法在缺少明确人类放行的情况下执行敏感动作。
这显著降低了被悄无声息滥用的概率。

3、维持合规与信任(Maintaining Compliance and Trust)
许多行业存在合规要求与问责标准。
人类监督确保关键操作中存在可追责的责任主体,这对审计链路与监管合规非常重要。
每一次被批准的关键动作都能绑定到一个人类决策,从而形成问责链条。
这种“人类在环治理”可能就是通过审计或审计失败之间的差别。

4、提供伦理与情境判断(Guiding Ethical and Contextual Judgment)
AI 智能体不具备人类价值观,也不具备对情境的完整理解。
人类可以考虑公司政策、客户情绪或伦理影响等细微因素,而这些往往是 AI 容易忽略的。
通过监督 AI 决策,人类确保行动符合更广泛的目标与价值,而不只是符合智能体被赋予的狭义任务。

总之,人类监督是 AI 自治的护栏。
它让我们既能享受智能体不知疲倦的效率,又能在真正重要的地方施加人类判断。
与其把监督视为束缚,不如把它视为安全吊带——它让我们能够在否则过于危险的高度进行扩展。
正如 Auth0 的 Juan Cruz Martinez 所言:我们希望 AI 智能体增强我们的能力,而不是完全取代我们的判断。
在关键动作上保留人类在环,正是实现这种平衡的方式。


四、控制 AI 智能体“能做什么”:权限隔离的必要性

除了对某些动作要求审批,安全的 AI 智能体设计还有一个基础要点:控制智能体权限与工具使用。
在传统 IT 安全中,我们很少会让新员工第一天就对所有系统拥有不受限访问权。
同理,AI 智能体也应该只被授予完成任务所必需的最小权限——这就是“最小特权原则”(least privilege)——并在清晰边界内运行。
这样可以防止某个局部错误演变成更大范围的灾难。

请记住:AI 智能体本质上是“LLM + 工具”(API、数据库、文件系统等)的组合。
智能体能访问的每一个工具或系统,如果被误用,都可能带来风险。
如果我们天真地把一个 AI 智能体用“主密钥”连上几十个内部服务,那就是在给自己埋雷。
相反,我们应该以更细粒度方式分离并限制智能体的权力。
该如何做到?以下是一些最佳实践:

1、基于角色的访问控制(RBAC)
像对人类用户一样,为 AI 智能体分配具有特定权限的角色。
例如,如果智能体工作是生成报告,就给它“报告生成器”角色:允许读取数据、生成草稿文档,但不允许删除记录或更改用户权限。
确保智能体角色的权限范围不远远超出其任务职责。
这样,即便智能体偏离预期,它能造成的影响也有上限。

2、工具权限细粒度控制(Fine-Grained Tool Permissions)
不要只做“全有或全无”。
理想情况是:为每个工具定义智能体可执行的具体操作。
例如,允许智能体读取数据库中的客户数据,但不允许删除;允许发送外部邮件,但不允许修改系统配置。
这种按工具、按动作的策略让智能体只能在狭窄且明确的车道里行驶。
一个行业专家给出的具体例子是:智能体只能在预发布环境执行 “delete_user” 操作,或只有在人工批准时才允许执行,但绝不允许在生产中自行执行。
相对地,像读取日志这类非破坏性动作可以更自由地放行。

3、环境隔离(Environment Isolation)
如果智能体要在多个环境(开发、预发、生产)中工作,要设置硬隔离边界。
在开发或测试阶段,智能体应只接触虚拟数据或沙盒环境。
只有经过验证、稳定的行为,才应接近真实生产数据。
即便如此,也可以设置规则:例如“智能体对生产只能读,除非人工批准才允许写”。
这种隔离能防止:一个在 dev 里训练得很“好心”的智能体,因为不知道环境差异而在 prod 里闯祸。

4、上下文感知限制(Context-Aware Restrictions)
还可以基于时间、地点或数据敏感度等上下文附加规则。
例如,禁止智能体在非工作时间发起金融交易;或禁止周末删除记录,因为此时值守人员更少。
这些策略常常能有效捕捉异常:如果智能体在凌晨 3 点尝试高风险动作,系统可以立刻阻断或标记以供审查。

通过组合这些措施,我们把“全权限”模式替换成与风险容忍度匹配的精细权限模型。
我们不再对智能体做二元“允许/不允许”,而是精准地划定:它需要做什么、只做这些、不要更多。
当智能体尝试越权时,要么被自动阻断,要么被路由到人工审批。
这种分层控制类似电网里的多重断路器——它限制单点失效的爆炸半径。

值得强调的是:建立如此细粒度控制,并不一定意味着极高负担。
现代 AI 智能体治理平台可以让你在一个中心位置定义角色与策略,并统一执行,而不是在代码里到处散布临时检查。
关键 takeaway 是:要非常有意识地设计 AI 智能体的运行环境。
通过认真切分“它能做什么、能在哪里做、在什么条件下做”,你会显著降低它在人工介入前做出伤害性动作的概率。


五、为 AI 行动设计“人工审批”工作流

限制智能体默认权限是硬币的一面;另一面是:设计人工审批工作流在何时、如何触发。
并非所有动作都能事先预批准或直接阻断——有些任务中智能体确实需要执行不寻常或敏感的步骤。
这时,与其给智能体放开手脚,不如插入一步:它必须请求人类许可。
挑战在于:要把这件事做得安全、好用,并且不让审批机制把自动化价值抵消掉。

图示:一个“人类在环”审批流示例。
AI 智能体对敏感动作(“买入股票”)请求授权;授权服务通知人类(例如手机推送);只有在人类明确批准后,智能体才能继续执行。

上面的图展示了一个通用方案:当 AI 智能体需要执行关键操作时,它会暂停并发出授权请求。
该请求会进入一个中间系统(可理解为授权服务器或治理枢纽),然后通过某种渠道触达人工监督者。
人类可能在手机上收到推送,或在桌面看到弹窗,内容会说明智能体想做什么——例如:
“智能体 X 想在生产数据库执行 DROP TABLE customers”,或“智能体 Y 想花费 5,000 美元购买云资源”。
人类可以一键批准或拒绝。
授权系统将结果返回给智能体,只有在批准时才允许继续执行。
整个过程可以在数秒内完成;也可以设计为异步:智能体等待回应,同时可能继续做其它任务。

一个设计良好的人工审批工作流应具备以下特征:

1、选择性触发(Selective triggering)
不是所有动作都需要审批,否则会把智能体效率抹平。
要定义清晰的“风险/影响足够大”的触发标准。
标准可基于操作类型、阈值(例如金额大小)、或异常上下文(例如第一次执行某动作)。

2、顺滑的用户体验(Seamless user experience)
发给人类的通知应尽量直观。
忙碌的 IT 经理或值班开发者不应该为回应审批而经历复杂流程。
最好是一键批准(必要时再加一层认证以增强安全)。
Auth0 团队指出:使用异步授权机制很有帮助——智能体不会一直卡住,人类也能在合理范围内按便利时间响应。
例如:手机推送一键放行非常理想。

3、审计链路与透明性(Audit trail & transparency)
这个工作流里的每一次请求与每一次决策都必须被记录。
这对事后复盘智能体为何做某事、谁批准了它很关键。
在强监管环境里,这些日志会成为合规证据的一部分。
对调试也很有价值:如果智能体反复请求某动作且总被拒绝,那就是需要调整智能体行为或策略的信号。

4、失败保护(Fail-safes)
要考虑人类未及时响应或智能体无法连接授权服务时怎么办。
在这种情况下,让智能体自动中止动作或升级到替代联系人往往更安全。
设计好这些兜底能让系统在边缘情况下更优雅地工作(例如:智能体绝不应把“未回应”当作“默认同意”)。

把人工审批织入智能体工作流后,我们就能同时拿到两种好处:
智能体自主处理常规与中等风险任务;而对超出权限等级的动作,它知道要向人类求助。
开发者可用多种方式实现这种工作流——从简单的自定义通知管理员,到更标准化的协议。
事实上,像 CIBA(Client-Initiated Backchannel Authentication,客户端发起的后向通道认证)这样的新兴标准,提供了“智能体异步请求用户授权”的正式方法。
细节可能很技术,但核心很简单:绝不让智能体在没有人类绿灯的情况下执行真正敏感的动作。
这样,当智能体 24/7 运行时,人类仍能安心入睡:因为一旦出现重要情况,就会被及时提醒,且不会在你不知情时发生离谱操作。


六、现实方案:用 Peta 把“策略 + 审批 + 审计”串起来

我们已经阐明安全部署 AI 智能体的原则:限制默认权力、对高风险动作加人工关卡、并监控一切。
概念上这很合理,但现实问题是:如何在不重复造轮子的情况下落地?
一个体现这些实践的方案是 Peta(来自 Dunia Labs)。
Peta 被设计为 AI 智能体的安全控制平面:让你能安全地把 AI 连接到内部工具,同时开箱即用地加上护栏、审批工作流与审计日志。
本质上,它用一层保护封装了智能体的工具使用,使你能在生产环境更放心地让智能体运行。
下面看它如何对应我们讨论的挑战。

1、细粒度权限与角色隔离(Granular Permissions & Role Separation)
Peta 对工具访问采用零信任思路。
智能体不是直接拿 API key 或数据库密码,而是通过 Peta 网关把这些服务接入。
智能体只获得短时有效、范围精确的“服务 token”,永远拿不到原始凭据。
你可以按用户、按智能体、按工具、按操作、甚至按环境设置策略。
例如:允许智能体自由读取监控 API 的数据,但对生产数据库任何写操作必须审批——Peta 的策略引擎使这种配置更容易。
它等于把“全有或全无”的访问模型替换为与角色与合规需求匹配的细粒度控制。
开发、预发、生产环境也可通过不同凭据与规则彻底隔离,从设计上避免跨环境事故。

2、人类在环审批(Human-in-the-Loop Approvals)
Peta 的突出特性之一是为高风险操作提供内置审批工作流。
在 Peta 架构中,智能体不会直接执行被标记的动作——请求会被路由到 Peta Desk 应用,它相当于人工审批控制台。
Peta Desk 是桌面应用(Windows、Mac、Linux),可供开发者与管理者监督智能体行为。
当智能体触发受保护动作时,Peta Desk 会弹出审批请求,描述智能体打算做什么。
责任人(可按角色或场景分配)一键批准或拒绝;只有批准后智能体才继续执行。
这种“AI 提议、人类决策”的流程保证破坏性操作不会悄然发生。
它的体验目标是快速顺滑——可以理解为“让合适的人给一个快速的 thumbs-up”。
目前审批通过桌面应用管理;未来团队计划扩展到移动端——意味着无论你在哪,都能通过手机通知授权智能体请求。
目标是让实时人类监督变得方便自然:既不成为瓶颈,又成为工作流的一部分。

3、审计链路与可观测性(Audit Trails and Observability)
Peta 会记录智能体采取的每一个动作,以及它是被策略自动放行还是被人类手动批准。
这些日志具备防篡改特性,并可导入 SIEM 系统。
这为合规审计提供完整可追溯性:你可以证明 AI 未在缺少适当授权时执行敏感动作。
对内部问责同样重要:出问题时,你有详尽记录知道智能体做了什么、谁批准了什么。
在 Peta 平台中,你还可以在集中控制台监控智能体活动,实时仪表盘显示各工具调用频率、多少请求被标记审批等。
异常模式(例如在奇怪时间段请求激增)可触发告警,成为早期预警系统。

4、凭据安全与本地/自建部署(Credential Security and On-Premise Deployment)
Peta 还解决了一个很现实的担忧:如何保护 API key 与凭据。
在 AI 智能体场景中,一个大风险是 API key 泄露(可能被放在智能体记忆或配置里)后被盗用。
Peta 的解法是:绝不把真实 secret 暴露给智能体——它们锁在加密 Vault 中,只有在服务端执行时才即时注入。
智能体只看到一个本身没有实际权限的 token,因此即便智能体“记忆”被读取,也没有 secret 可偷。
此外,Peta 设计为可部署在你自己的基础设施里(云或本地)。
你可以把系统完整运行在你的网络内,甚至在隔离网络(air-gapped)中运行,从而避免把敏感数据送到第三方服务。
这对处理高度敏感信息的公司很关键:你获得先进监督能力,同时不牺牲数据驻留与安全策略。

为了把它讲得更具体,考虑一个从 Peta 用例改编的真实场景:
你有一个“DevOps 助手”AI 智能体,负责协助管理部署。
某个深夜,它检测到异常:一次新发布后错误率飙升。
智能体的 LLM 推断出解决方案:回滚到上一个稳定版本。
而生产回滚是敏感动作。
当 Peta 在位时,智能体的回滚请求会被拦截。
执行部署所需凭据会从 Vault 安全取出,但在真正执行前,该动作会被标记为需审批。
值班工程师会通过 Peta Desk 收到提示:
“AI 智能体请求:将生产环境服务 XYZ 回滚到版本 1.2.3。”
工程师快速核对上下文,确认与当前事故一致后点击批准。
回滚安全执行,智能体记录结果,第二天复盘时可以审查这条记录。
关键点在于:智能体能够自主提出并推动修复,但由人类提供最终批准,从而确保关键生产变更有可追责的人类在环。
这类“人机协作”正是 Peta 开箱即用支持的:智能体做重活与初步分析,人类对关键动作进行监督与最终判断。

(既然承诺不把本文写成广告,我们就点到为止——但值得强调的是,Peta 只是解决“人类在环”挑战的一种例子。对开发者、IT 管理者与创业者而言,关键 takeaway 是:这类方案确实存在,能帮助你更安全地部署 AI 智能体。无论你自建审批系统还是使用类似 Peta 的平台,原则都一样。)


七、结语:迈向负责任的自治

AI 智能体正走向更强大、更普及——我们可能很快就会拥有全天候处理客户咨询、优化业务流程、管理基础设施的自治程序。
这种未来令人兴奋,但不应草率对待。
允许 AI 智能体 24/7 运行,并不等同于给它完全自由。
正如我们讨论的:通过精心设计的审批工作流与严格权限控制,把人类留在环内是必要的,这能在避免陷阱的同时释放 AI 智能体的收益。
把它理解为一条指挥链:AI 智能体勤勉工作、可以提出建议,但对真正重大的事项,人类监督者仍是最终决策者。

通过投入这些治理措施——无论是自研还是采用为此目的打造的平台与框架——组织就能更有信心地把 AI 智能体整合进运营。
开发者与 IT 管理者能更安心:智能体不会在无人知晓的情况下清空数据库或花掉数百万计算成本。
创业者也能用 AI 扩大服务规模,而不必放弃对关键业务动作的监督。
从本质上说,人类审批与监督把 AI 智能体从高风险实验变成可靠队友。

前进路径是协作:人类与 AI 智能体共同工作,各自发挥所长。
人类提供直觉、伦理与战略判断;AI 智能体提供速度、规模与不知疲倦的执行。
借助审批关卡、审计链路与最小特权访问等护栏,我们能确保协作既高效又安全。
AI 智能体无疑会在经济与日常工作流中扮演重要角色——但当我们把“人类引导之手”放在方向盘上,就能把自治引向正确方向。
这不是压制 AI 的能力,而是负责任地引导它。
而这,正是释放 24/7 AI 智能体在真实世界全部潜力的关键。

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值