Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何制作和使用自签名证书

如何制作和使用自签名证书

原创
作者头像
soulteary
修改于 2021-02-06 10:38:51
修改于 2021-02-06 10:38:51
4.5K0
举报

如何制作和使用自签名证书

在计算机加密和安全领域中,我们会时常遇到:自签名安全证书。

因为自签名证书签发相对于商业证书流程简单,费用低廉(除了电费几乎不花钱),更新容易。所以在开发领域、甚至一些小众场景下特别常见,比如 K8S / MySQL 集群中的 TLS 认证,一些大的集团、公司的内网服务、网站安全证书、企业路由器设备的管理后台、用于管理企业员工的“安全准入客户端”等不乏使用这个方案。

本篇文章就来聊聊如何快速生成证书,以及如何安装部署到不同的环境中。

写在前面

经常有人说,使用自签名证书不安全,会导致中间人攻击。这里需要为自签名证书“正名”,如果你制作生成的证书被妥善保管(即不泄漏并被二次利用),并将其加入你的有限的设备(自用、团队使用)的证书信任列表中,在明确你的设备访问地址(不涉及DNS攻击),你是不会遇到中间人攻击的。

比如当你遇到类似下面的场景,不一定会遇到不安全的事情,有可能只是管理员忘记换掉过期证书、或者你自己生成证书后,使用了一台没有信任证书的设备进行访问、也可能是管理员压根没有想在公网签发证书,想做一个私有的网站:

常见的网站因为证书问题而产生的警告页面
常见的网站因为证书问题而产生的警告页面

多数时候我们看到的不安全的证书是因为应用错误配置、有心人基于 DNS 地址攻击、证书过期造成、甚至是我们未曾正确配置证书信任白名单造成的。

一旦我们正确生成证书,在妥善保存证书后,进行了有限设备的白名单设置后,我们的证书和商业证书的使用是几乎没有差别的(除了无法使用 OCSP、EV 证书使用上存在一定额外工作外)。

信任之后,会看到浏览器提示“安全”
信任之后,会看到浏览器提示“安全”

那么来聊聊如何快速生成证书。

使用命令行脚本生成自签名证书

最常见和通用的做法便是安装配置一个带有 openssl 环境的系统,然后使用命令行执行类似下面这样的命令:

代码语言:txt
AI代码解释
复制
openssl req -x509 -newkey rsa:2048 -keyout ssl/${fileName}.key -out ssl/${fileName}.crt -days 3600 -nodes ...

这里如果你选择不使用配置文件的话,得参考openssl 文档,附带一堆参数,或需要交互式的输入一堆选项,并祈祷在中间每一步没有输入出错,例如下面这样:

代码语言:txt
AI代码解释
复制
enerating a RSA private key
....................................................................................................................................................................................................................................................................++++
.............................................................++++
writing new private key to 'example.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:XX
Locality Name (eg, city) []:XXXX
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example, Inc
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:example.com
Email Address []:example@soulteary.com

相比之下,使用类似下面的配置生成证书会稍微容易那么一些:

代码语言:txt
AI代码解释
复制
#!/bin/sh

OUTPUT_FILENAME="lab.com"

printf "[req]
prompt                  = no
default_bits            = 4096
default_md              = sha256
encrypt_key             = no
string_mask             = utf8only

distinguished_name      = cert_distinguished_name
req_extensions          = req_x509v3_extensions
x509_extensions         = req_x509v3_extensions

[ cert_distinguished_name ]
C  = CN
ST = BJ
L  = BJ
O  = HomeLab
OU = HomeLab
CN = lab.com

[req_x509v3_extensions]
basicConstraints        = critical,CA:true
subjectKeyIdentifier    = hash
keyUsage                = critical,digitalSignature,keyCertSign,cRLSign #,keyEncipherment
extendedKeyUsage        = critical,serverAuth #, clientAuth
subjectAltName          = @alt_names

[alt_names]
DNS.1 = lab.com
DNS.2 = *.lab.com
DNS.3 = *.page.lab.com

">ssl/${OUTPUT_FILENAME}.conf

openssl req -x509 -newkey rsa:2048 -keyout ssl/$OUTPUT_FILENAME.key -out ssl/$OUTPUT_FILENAME.crt -days 3600 -nodes -config ssl/${OUTPUT_FILENAME}.conf

类似的脚本,我曾在 Traefik 示例脚本中提到过: https://github.com/soulteary/traefik-example/blob/main/scripts/generate-certs.sh

还有更简单的方案吗?尤其是在有不断修改 DNS、希望使用脚本自动化签订证书的场景下?

快速生成证书

为此我写了一个脚本,并使用容器进行封装,以达到可以使用极其简的命令行来生成证书的目的,并借助容器简化掉了本地需要安装 openssl 依赖的问题,“开箱即用”。相关代码我已经开源,项目地址:https://github.com/soulteary/certs-maker

比如你想生成一个稍微复杂一些的站点证书,只需要执行下面这行命令就足够了:

代码语言:txt
AI代码解释
复制
docker run --rm -it -e CERT_DNS="domain.com;*.domain.com;*.a.domain.com" -v `pwd`/certs:/ssl soulteary/certs-maker

执行完毕你将会看到类似下面的日志:

代码语言:txt
AI代码解释
复制
User Input: { CERT_DNS: 'domain.com;*.domain.com;*.a.domain.com' }
Generating a RSA private key
................................................................................................................................................+++++
.........................................................+++++
writing new private key to 'ssl/domain.com.key'
-----

以及能够在 ssl 目录中看到我们生成的证书文件。

至于其他的使用方式,比如生成包含多个域名的混合证书、生成单个证书,只需要调整 CERT_DNS 参数的值即可。如果想进一步定制前文提到的证书细节,比如证书签发国家、省份等信息,可以参考开源项目仓库的使用方式,添加其他的参数,这里就不过多赘述了。

使用 docker-compose 生成

如果你希望将命令保存下来,作为代码存储在仓库里,也可以考虑编写一个 compose 文件:

代码语言:txt
AI代码解释
复制
version: '2'

services:

  certs-maker:
    image: soulteary/certs-maker
    environment:
      - CERT_DNS=a.com;b.com;c.com;*.d.com;
    volumes:
      - ./certs:/ssl

将上面的内容保存为 docker-compose.yml,然后执行 docker-compose up ,你会在 certs 目录看到生成的证书文件。

使用证书

生成证书之后,来聊聊如何使用证书。

在各种系统上导入证书

导入证书可以参考下面的文档,过程都很简单,引导证书,然后重启需要使用证书的应用即可。

在 Java 应用中信任自签名证书

如果你使用的是 Java 应用访问自签名的网站,应用访问过程会出现因为证书错误而拒绝连接的错误。

解决这个问题并不复杂,只需要额外做一点点工作,将证书添加到 keystore 中,重启 Java 应用即可:

代码语言:txt
AI代码解释
复制
sudo keytool -import -alias charles -file /Path-To-Certs/key.crt -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit

这个操作对于证书过期的情况,也同样有效,早先有一篇文章有描述:《使用 Docker 和 Traefik v2 搭建 Confluence 7.3 》

在 Debian / Ubuntu / Alpine 系统中信任证书

对于 Debian / Ubuntu 系统,信任证书相当简单,只需要将证书拷贝到“待安装目录”,然后执行证书更新命令即可:

代码语言:txt
AI代码解释
复制
cp *.crt /usr/local/share/ca-certificates/
update-ca-certificates

Alpine 也是一样,考虑我们经常在容器场景中使用它,所以这里直接给出一个完整的Dockerfile 示例:

代码语言:txt
AI代码解释
复制
FROM alpine

RUN apk update && apk add ca-certificates && rm -rf /var/cache/apk/*

ADD ./ssl/*.crt /usr/local/share/ca-certificates/

RUN update-ca-certificates --fresh

搭建配合安装证书使用的 Web 服务

上文中如果想在客户端(尤其是手机)上安装证书,一定会遇到跨系统传输文件的问题。为了方便分发和安装,这里可以使用 Nginx 启动一个用于分享证书安装的 Web 服务。

使用更“直观”的方式获取证书
使用更“直观”的方式获取证书

搭建通用服务

我们可以使用 Nginx 的 ngx_http_sub_module ngx_http_autoindex_module 模块构建一个能够自动列举证书目录的服务:

代码语言:txt
AI代码解释
复制
server {
    listen 80;
    server_name localhost;
    location = /favicon.ico {
        empty_gif;
    }
    location / {
        root /public;
        autoindex on;
        sub_filter '<h1>Index of /</h1>'  '<h1>Get Certs</h1>';
        sub_filter_once on;
    }
}

将上面的内容保存为 default.conf 后,再创建一个名为 docker-compose.yml 的配置文件:

代码语言:txt
AI代码解释
复制
version: '2'

services:

  nginx:
    image: nginx:1.19.6-alpine
    ports:
      - 8080:80
    volumes: 
      - ./default.conf:/etc/nginx/templates/default.conf.template:ro
      - ./public:/public:ro

然后使用 docker-compose up 启动服务后,使用手机访问页面,就能够看到类似下面的页面,然后使用手机访问证书文件进行安装和信任就可以啦。

更简单的配置方式

上面的模式我们将配置和服务编排文件分拆成了两个文件,考虑到这个 Nginx 配置十分简单,那么我们是否有办法将其简化呢?

答案是有的,通过对 command 命令进行调整,我们可以将 Nginx 配置的创建和服务启动同时写在 docker-compose.yml 编排文件中:

代码语言:txt
AI代码解释
复制
version: '2'

services:

  nginx:
    image: nginx:1.19.6-alpine
    ports:
      - 8080:80
    volumes: 
      - ./public:/public:ro
    command: >
      /bin/sh -c "
      echo \"daemon off;\" >> /etc/nginx/nginx.conf;
      echo \"server {
            listen 80;
            server_name localhost;
            location = /favicon.ico {
                empty_gif;
            }
            location / {
                root /public;
                autoindex on;
                sub_filter '<h1>Index of /</h1>'  '<h1>Get Certs</h1>';
                sub_filter_once on;
            }
        }\" > /etc/nginx/conf.d/default.conf; nginx;
      "

最后

最近入手了三根雷电数据线,快过年了,或许可以折腾一下雷电数据线组网开发。

--EOF


我现在有一个小小的折腾群,里面聚集了一些喜欢折腾的小伙伴。

在不发广告的情况下,我们在里面会一起聊聊软件、HomeLab、编程上的一些问题,也会在群里不定期的分享一些技术沙龙的资料。

喜欢折腾的小伙伴欢迎扫码添加好友。(请注明来源和目的、实名入群,否则不会通过审核)

关于折腾群入群的那些事


本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)

本文作者: 苏洋

创建时间: 2021年02月06日

统计字数: 6822字

阅读时间: 14分钟阅读

本文链接: https://soulteary.com/2021/02/06/how-to-make-and-use-a-self-signed-certificate.html

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
每周AI论文速递(250526-250530)
本文介绍 Mutarjim,一个专为阿拉伯语-英语双向翻译设计的紧凑型高性能语言模型。尽管当前大规模大语言模型在机器翻译等自然语言处理任务中展现出显著优势,我们发现小型模型同样具备竞争力。基于这一发现,我们在专为阿拉伯语和英语优化的 Kuwain-1.5B 语言模型基础上开发了 Mutarjim。该模型通过采用优化的两阶段训练流程和精选的高质量训练语料,在保持较小规模的同时,其性能表现超越了多个主流基准测试中的大型模型。实验数据表明,Mutarjim 的性能可与体积大 20 倍的模型相媲美,同时大幅降低了计算资源和训练成本。此外,我们提出了 Tarjama-25 新基准测试集,该数据集包含 5,000 组经过专家校验的平行句对,覆盖广泛领域,有效解决了现有阿拉伯语-英语评测数据存在的领域局限、语句过短和英语源偏置等问题,为相关研究提供了更全面均衡的评估体系。值得注意的是,Mutarjim 在 Tarjama-25 的英阿翻译任务中取得了当前最优性能,甚至超越了 GPT-4o mini 等规模显著更大的专有模型。我们将公开 Tarjama-25 数据集,以促进阿拉伯语-英语翻译系统的后续研究和评估工作。
叶子的技术碎碎念
2025/06/08
20
每周AI论文速递(250526-250530)
每周AI论文速递(250317-250321)
本文提出 RWKV-7 "Goose"新型序列建模架构及其预训练语言模型。该模型在 30 亿参数规模下实现了多语言任务下游性能的新突破,其英语任务表现与当前最优模型相当,但训练 token 量显著少于同类 30 亿参数模型。值得注意的是,RWKV-7 模型仅需恒定内存开销和恒定时间完成每个 token 的推理。该架构创新性地提出了具有向量门控和上下文学习率的广义 delta 规则,以及宽松的值替换规则。实验证明 RWKV-7 能实现状态追踪并识别所有正则语言,同时保持训练过程的可并行性。这一特性超越了标准复杂度假设下 Transformer 的能力边界(后者仅限于
叶子的技术碎碎念
2025/04/08
520
每周AI论文速递(250317-250321)
每周AI论文速递(250113-250117)
尽管大语言模型 (LLMs) 表现卓越,但其发展面临一个关键挑战:在人类评估困难或 LLMs 超越人类的任务中,如何提供有效的反馈。尽管使用 LLMs 进行批评的兴趣日益增长,但当前的方法仍然依赖于人类注释或更强大的模型,这使得在没有外部监督的情况下增强批评能力的问题仍未解决。我们提出了 SCRIT (Self-evolving CRITic),这是一个能够实现批评能力真正自我进化的框架。从技术上讲,SCRIT 通过训练合成数据进行自我改进,这些数据由基于对比的自我批评者生成,该批评者使用参考解决方案进行逐步批评,并通过自我验证机制确保批评质量,该机制通过纠正结果来确保批评质量。使用 Qwen2.5-72B-Instruct(最强大的 LLMs 之一)实现,SCRIT 在批评纠正和错误识别基准测试中实现了高达 10.3% 的提升。我们的分析表明,SCRIT 的性能随着数据和模型规模的增加而正向扩展,优于其他方法,并且其自我验证组件对其性能至关重要。
叶子的技术碎碎念
2025/04/08
680
每周AI论文速递(250113-250117)
每周AI论文速递(250224-250228)
LLM-Microscope: 揭示 Transformer 上下文记忆中标点符号的隐藏作用
叶子的技术碎碎念
2025/04/08
550
每周AI论文速递(250224-250228)
每周AI论文速递(250331-250404)
大语言模型 (Large Language Models, LLMs) 的出现引发了人工智能领域的变革,推动了一系列具备复杂推理能力、强健感知能力和跨领域多任务执行能力的先进智能体的发展。随着这类智能体在 AI 研究和实际应用中的作用日益凸显,其设计、评估与持续改进过程也面临着多维度、高复杂度的挑战。本综述采用模块化的类脑架构框架,融合认知科学、神经科学与计算研究的核心原理,对智能体技术进行全面梳理。研究内容分为四个相互关联的部分:首先解析智能体的模块化基础架构,通过系统化映射其认知、感知与执行模块与人脑功能的对应关系,深入阐释记忆系统、世界模型、奖励机制及类情绪系统等核心组件;其次探讨智能体的自我增强与自适应进化机制,重点分析其通过自动化优化范式(包括新兴的 AutoML 和大语言模型驱动的优化策略)实现能力自主提升、动态环境适应与持续学习的方法;第三部分研究协作型进化多智能体系统,揭示智能体通过交互协作与社会化组织产生的群体智能,及其与人类社交行为的相似性;最后针对 AI 系统的安全性、可靠性及社会效益这一关键命题,系统分析内生与外源安全威胁、伦理对齐要求、系统鲁棒性保障等核心问题,提出确保实际部署可信度的有效缓解策略。
叶子的技术碎碎念
2025/04/08
1630
每周AI论文速递(250331-250404)
每周AI论文速递(250310-250314)
随着先进的大语言模型的兴起,生成文本检测变得越来越重要。尽管有许多努力,但没有单一算法在不同类型的未见文本上表现一致,或保证对新的大语言模型的有效泛化。可解释性在实现这一目标中起着关键作用。在本研究中,我们通过使用稀疏自编码器从 Gemma-2-2b 残差流中提取特征来增强生成文本检测的可解释性。我们识别了具有可解释性和高效性的特征,通过领域和模型特定的统计、引导方法以及手动或基于大语言模型的解释来分析它们的语义和相关性。我们的方法提供了关于来自各种模型的文本与人类撰写内容如何不同的宝贵洞察。我们展示了现代大语言模型具有独特的写作风格,尤其是在信息密集的领域中,尽管它们可以通过个性化提示生成类似人类的输出。
叶子的技术碎碎念
2025/04/08
960
每周AI论文速递(250310-250314)
每周AI论文速递(241202-241206)
尽管视觉-语言-动作 (VLA) 模型在多种机器人任务中取得了进展,但其泛化能力受限,主要因完全依赖成功轨迹的行为克隆。此外,这些模型常针对不同设置下的专家演示进行微调,导致分布偏差,限制了其对多样化操作目标(如效率、安全性和任务完成度)的适应性。为此,我们提出 GRAPE: 通过偏好对齐泛化机器人策略。具体来说,GRAPE 在轨迹层面对齐 VLA,并从成功与失败试验中隐式建模奖励,以提升对多样化任务的泛化能力。同时,GRAPE 将复杂任务分解为独立阶段,并通过大型视觉-语言模型提出的关键点,利用定制时空约束自动引导偏好建模。这些约束灵活,可根据不同目标(如安全性、效率或任务成功)进行定制。我们在真实与模拟环境中广泛评估 GRAPE。实验显示,GRAPE 显著提升最先进 VLA 模型的性能,领域内与未见任务的成功率分别提高 51.79% 和 60.36%。此外,GRAPE 可与多种目标对齐,如安全性与效率,分别降低碰撞率 44.31% 和轨迹步长 11.15%。所有代码、模型及数据均可在 https://grape-vla.github.io/ 获取。
叶子的技术碎碎念
2025/04/08
680
每周AI论文速递(241202-241206)
每周AI论文速递(240819-240823)
xGen-MM (BLIP-3): 一个开放的大型多模态模型家族 本报告介绍了 xGen-MM(又称 BLIP-3),这是一个用于开发大型多模态模型(LMMs)的框架。该框架整合了精心策划的数据集、训练方案、模型架构以及一系列由此产生的 LMMs。xGen-MM,简称 xGen-MultiModal,是 Salesforce xGen 在基础 AI 模型领域倡议的扩展。我们的模型在包括单图像和多图像基准在内的多种任务上进行了严格的评估。我们的预训练基础模型展现了强大的情境学习能力,并且指令调整模型在相同模型大小的开源 LMMs 中展现了竞争性的性能。此外,我们引入了一个采用 DPO 进行安全调整的模型,旨在减少如幻觉等有害行为并增强安全性。我们开放了我们的模型、精心策划的大规模数据集以及我们的微调代码库,以推动 LMM 研究的进一步发展。相关资源将在我们的项目页面上提供。
叶子的技术碎碎念
2025/04/08
610
每周AI论文速递(240819-240823)
每周AI论文速递(250217-250221)
自回归模型 (ARMs) 被广泛认为是大语言模型 (LLMs) 的基础。我们通过引入 LLaDA 来质疑这一观点,LLaDA 是一种在预训练和监督微调 (SFT) 范式下从头开始训练的扩散模型。LLaDA 通过前向数据掩码过程和反向过程来建模数据分布,参数化由一个普通的 Transformer 来预测被掩码的 Token。通过优化似然下界,它为概率推理提供了一种有原则的生成方法。在广泛的基准测试中,LLaDA 表现出强大的可扩展性,优于我们自建的 ARM 基线。值得注意的是,LLaDA 8B 在上下文学习中与 LLaMA3 8B 等强大的 LLMs 表现相当,并且在 SFT 后,在多轮对话等案例研究中展示了令人印象深刻的指令跟随能力。此外,LLaDA 解决了反转诅咒问题,在反转诗歌补全任务中超越了 GPT-4o。我们的研究结果表明,扩散模型是 ARMs 的一个可行且有前途的替代方案,质疑了上述关键 LLM 能力本质上与 ARMs 相关的假设。
叶子的技术碎碎念
2025/04/08
1130
每周AI论文速递(250217-250221)
每周AI论文速递(240729-240802)
https://github.com/careywyr/AI-Weekly-Paper
叶子的技术碎碎念
2025/04/08
720
每周AI论文速递(240729-240802)
每周AI论文速递(250421-250425)
Kuwain 1.5B:通过语言注入(Language Injection)构建的阿拉伯语小型语言模型(Small Language Model)
叶子的技术碎碎念
2025/04/28
1420
每周AI论文速递(250421-250425)
每周AI论文速递(240902-240906)
科学文献理解对于提取目标信息和获得洞察力至关重要,从而显著推进科学发现。尽管大语言模型 (LLMs) 取得了显著的成功,但它们在理解科学文献方面面临挑战,主要是因为 (1) 缺乏科学知识,以及 (2) 不熟悉专门的科学任务。
叶子的技术碎碎念
2025/04/08
520
每周AI论文速递(240902-240906)
每周AI论文速递(240826-240830)
视觉-语言模型 (VLMs) 领域,以图像和文本为输入并输出文本,正处于快速发展阶段,但在数据、架构和训练方法等关键开发环节上尚未形成共识。本文旨在作为构建 VLM 的实践指南。我们首先概述了当前最先进方法的优缺点,探讨了领域内主要挑战,并指出了未充分探索领域的潜在研究方向。随后,我们详细阐述了构建 Idefics3-8B 的过程,该模型在性能上大幅领先于前代 Idefics2-8B,且高效地仅利用开放数据集进行训练,流程简洁明了。这一过程中,我们创建了 Docmatix 数据集,旨在增强文档理解能力,其规模达到了先前数据集的 240 倍。我们同时发布了该模型及其训练所用的数据集。
叶子的技术碎碎念
2025/04/08
1110
每周AI论文速递(240826-240830)
每周AI论文速递(250407-250411)
虽然大型视觉语言模型 (VLMs) 具备卓越性能,但其计算资源需求过高,限制了这类模型在移动和边缘设备上的部署。传统小型 VLMs 通常沿用大型模型的设计方案(例如复杂的图像 Token 化处理),导致 GPU 内存利用率低下,难以满足终端设备的实际应用需求。
叶子的技术碎碎念
2025/04/13
950
每周AI论文速递(250407-250411)
每周AI论文速递(250127-250131)
基准测试是追踪大语言模型(LLM)能力快速进展的重要工具。然而,这些基准测试在难度上并未跟上节奏:如今的 LLMs 在 MMLU 等流行基准测试上的准确率已超过 90%,这限制了对先进 LLM 能力的有根据测量。作为回应,我们介绍了“人类的最终考试”(HLE),这是一个多模式基准测试,在人类知识前沿设计,旨在成为同类中最后的封闭式学术基准测试,涵盖广泛的主题。 HLE 包含 3,000 个问题,跨越数十个学科,包括数学、人文学科和自然科学。HLE 由全球主题专家开发,包含适合自动化评分的多项选择题和简答题。每个问题都有一个已知的明确且易于验证的解决方案,但无法通过快速互联网检索获得答案。 先进的 LLMs 在 HLE 上表现出低准确性和校准度,突显了当前 LLM 能力与专家人类前沿之间的显著差距,在封闭式学术问题上的表现存在巨大差异。为了基于对模型能力的清晰理解来指导研究和政策制定,我们公开发布了 HLE,地址为https://lastexam.ai。
叶子的技术碎碎念
2025/04/08
520
每周AI论文速递(250127-250131)
每周AI论文速递(240812-240816)
GPT-4o 的卓越多模态能力和交互体验,凸显了其在实际应用中的重要性,但开源模型在这两个领域的表现往往不尽人意。本文介绍的 VITA,是首个开源的多模态大语言模型(MLLM),能够同时处理和分析视频、图像、文本和音频,并提供先进的多模态交互体验。我们从 Mixtral 8x7B 这一语言模型基础出发,扩展其中文词汇,并进行了双语指令调整。通过多模态对齐和指令调整的两阶段多任务学习,我们进一步赋予了该模型视觉和听觉能力。VITA 在多种单模态和多模态基准测试中表现出色,显示出其强大的多语言、视觉和听觉理解能力。此外,我们在提升自然多模态人机交互体验方面取得了显著进展,首次在 MLLM 中实现了非唤醒交互和音频中断功能。VITA 标志着开源社区在探索多模态理解和交互无缝集成方面迈出了第一步。尽管 VITA 仍需大量工作以接近闭源模型的水平,但我们相信其作为先驱的角色将为后续研究奠定坚实基础。项目页面:https://vita-home.github.io。
叶子的技术碎碎念
2025/04/08
930
每周AI论文速递(240812-240816)
每周AI论文速递(241230-250103)
OpenAI 的 GPT-4 突破突显了通过增强推理能力来改进大语言模型的潜力。然而,大多数关于推理的研究都集中在数学任务上,而像医学这样的领域则研究较少。尽管医学领域与数学不同,但由于医疗保健的高要求,它同样需要强大的推理能力来提供可靠的答案。然而,与数学不同,验证医学推理更具挑战性。为了解决这个问题,我们提出了可验证的医学推理问题,并使用医学验证器来检查模型输出的正确性。这种可验证性通过两阶段方法促进了医学推理的发展:(1) 使用验证器指导搜索复杂的推理轨迹以微调大语言模型,(2) 应用基于验证器奖励的强化学习 (RL) 来进一步增强复杂推理。最后,我们介绍了 HuatuoGPT-o1,这是一种能够进行复杂推理的医学大语言模型,仅使用 40K 个可验证问题就超越了通用和医学专用基准模型。实验表明,复杂推理提高了医学问题解决能力,并且从强化学习中获得更大的提升。我们希望我们的方法能够激发医学和其他专业领域推理的进步。
叶子的技术碎碎念
2025/04/08
760
每周AI论文速递(241230-250103)
每周AI论文速递(250120-250124)
我们探索了一种进化搜索策略,用于扩展大语言模型中的推理计算时间。我们提出的方法,Mind Evolution,利用语言模型生成、重组和优化候选响应。该方法在解决方案评估器可用时,避免了形式化底层推理问题的需求。在控制推理成本的前提下,我们发现 Mind Evolution 在自然语言规划任务中显著优于其他推理策略,如 Best-of-N 和 Sequential Revision。在 TravelPlanner 和 Natural Plan 基准测试中,Mind Evolution 使用 Gemini 1.5 Pro 解决了超过 98% 的问题实例,且无需使用形式化求解器。
叶子的技术碎碎念
2025/04/08
1040
每周AI论文速递(250120-250124)
每周AI论文速递(241216-241220)
尽管视频感知能力已迅速集成到大语言模型 (LMM) 中,但其驱动视频理解的基础机制仍未被充分理解。因此,该领域中的许多设计决策缺乏适当的依据或分析。训练和评估此类模型的高计算成本,加上有限的开放研究,阻碍了视频-LMM 的发展。为解决这一问题,我们进行了一项全面研究,旨在揭示有效驱动 LMM 中视频理解的因素。 我们首先批判性地审视了与视频-LMM 研究相关的高计算需求的主要贡献因素,并发现了规模一致性 (Scaling Consistency),即在较小模型和数据集 (达到临界规模) 上做出的设计和训练决策能有效迁移到更大模型上。基于这些见解,我们探索了视频-LMM 的许多视频特定方面,包括视频采样、架构、数据组成、训练计划等。例如,我们证明了训练期间的 fps (frames per second) 采样远优于均匀帧采样,并确定了哪些视觉编码器最适合视频表示。 在这些发现指导下,我们引入了 Apollo,这是一系列在不同模型规模上实现卓越性能的先进 LMM。我们的模型能够高效感知长达一小时的视频,其中 Apollo-3B 在 LongVideoBench 上以 55.1 的分数超越了大多数现有 7B 模型。Apollo-7B 在与 7B LMM 的比较中处于领先地位,在 MLVU 上获得 70.9 分,在 Video-MME 上获得 63.3 分。
叶子的技术碎碎念
2025/04/08
840
每周AI论文速递(241216-241220)
每周AI论文速递(240624-240628)
在传统的检索增强生成 (RAG) 框架中,基本的检索单元通常都很短。常见的检索器如 DPR 通常处理100字的 Wikipedia 段落。这种设计使得检索器必须在庞大的语料库中找到“针”一样的小单元。相比之下,阅读器只需从这些短小的检索单元中提取答案。这种不平衡的“重”检索器和“轻”阅读器设计可能导致次优的性能。为了缓解这种不平衡,我们提出了一种新的框架 LongRAG,它包含一个“长检索器”和一个“长阅读器”。LongRAG 将整个 Wikipedia 处理成 4K-token 的单元,比之前增加了30倍。通过增加单元的大小,我们将总单元数从 2200 万显著减少到 70 万。这显著降低了检索器的负担,从而带来了显著的检索性能提升:在 NQ 数据集上,答案召回率@1达到了71%(之前为52%),在 HotpotQA(全维基)上,答案召回率@2达到了72%(之前为47%)。然后,我们将前k个检索到的单元(大约 30K tokens)输入到现有的长上下文大语言模型 (LLM) 中进行零样本回答抽取。在不需要任何训练的情况下,LongRAG 在 NQ 数据集上的 EM 达到了62.7%,这是已知的最佳结果。LongRAG 在 HotpotQA(全维基)上也达到了64.3%,与目前的最优模型相当。我们的研究为将 RAG 与长上下文大语言模型结合的未来发展方向提供了宝贵的见解。
叶子的技术碎碎念
2025/04/08
480
每周AI论文速递(240624-240628)
推荐阅读
相关推荐
每周AI论文速递(250526-250530)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档