联系管理员

开通文章发布权限

扫码 添加微信
微信图片
电话:18888888888 QQ:

初识 DeepSeek 大模型

‌DeepSeek‌是由杭州深度求索人工智能基础技术研究有限公司开发的一款人工智能模型,成立于2023年7月,专注于开发先进的大语言模型和相关技术。DeepSeek在技术上实现了重要突破,特别是在大语言模型的开源和高效训练方面表现出色。‌

DeepSeek 大模型详细解读

DeepSeek-R1 是一款通过大规模强化学习(Reinforcement Learning, RL)训练的大型语言模型,专注于提升模型的推理能力。与传统的依赖监督微调(Supervised Fine-Tuning, SFT)的模型不同,DeepSeek-R1 在初始阶段未依赖 SFT,而是通过强化学习自然地发展出强大的推理行为。

主要特点

  • 推理能力:DeepSeek-R1 展现出类人的推理能力,尤其在数学问题解决、代码生成和逻辑推理任务方面。

  • 多阶段训练:为了解决可读性差和语言混杂等问题,DeepSeek-R1 引入了多阶段训练流程,包括冷启动数据微调、推理导向的强化学习和监督微调。

  • 推理能力蒸馏:将大模型学到的推理模式蒸馏到小模型中,使小模型在推理任务上表现出色。

  • 技术架构:采用 Transformer 架构,引入稀疏注意力机制和 Mixture-of-Experts(MoE)架构,增强模型容量。

  • 性能表现:在 AIME 2024、MATH-500 等基准测试中取得优异成绩,与 OpenAI-o1-1217 相当。

DeepSeek 的使用方法

1. 注册与登录

  • 网页版:访问 https://chat.deepseek.com/ ,无需下载,打开浏览器即可使用。

  • App版:在各大应用商店搜索“DeepSeek”,下载安装即可。

2. 功能模块

  • V3模型(默认模式):反应快、知识丰富,适合日常对话、知识问答。

  • R1模型(深度思考模式):逻辑强、分析深入,适合复杂问题分析、创意写作。

3. 高级功能

  • API接口:获取API密钥后,可将DeepSeek功能集成到自己的应用中。

  • 本地部署:从Hugging Face上下载模型权重和相关文件,按照官方文档进行本地部署。

DeepSeek 提问技巧

1. 明确需求

尽量清晰地描述你的问题或任务。例如:“请帮我总结一下人工智能的发展历史。”。

2. 提供上下文

如果问题需要背景信息,可以在提示词中加入上下文。例如:“请将以下英文句子翻译成中文:‘The future of AI is promising.’”。

3. 指定格式

如果你希望回答以特定格式呈现,可以在提示词中说明。例如:“请以 bullet points 的形式列出5条健康饮食的建议。”。

4. 分步骤提问

对于复杂任务,可以分步骤提问。例如:第一步:“请解释什么是机器学习。” 第二步:“机器学习有哪些主要应用场景?”。

5. 使用角色设定

你可以让 DeepSeek 扮演特定角色来回答问题。例如:“你是一位资深程序员,请帮我解释一下Python中的递归函数。”。

6. 尝试开放式问题

开放式问题可以激发更详细的回答。例如:“人工智能在现代社会中有哪些重要应用?它的发展前景如何?”。

7. 调整语气和风格

如果你希望回答的语气或风格符合特定需求,可以在提示词中指定。例如:“请用通俗易懂的语言解释量子计算。”。

8. 多轮对话

如果一次回答不够满意,可以通过多轮对话逐步完善。例如:你:“请推荐几本关于心理学的书。” DeepSeek:“推荐《思考,快与慢》《影响力》《自卑与超越》。” 你:“能详细介绍一下《思考,快与慢》这本书吗?”。

9. 尝试不同的提示词

如果第一次回答不符合预期,可以换一种方式提问。例如:第一次:“如何学习编程?” 第二次:“作为一个编程新手,我应该从哪些资源开始学习?”。

10. 万能提问模板

背景:我是做什么的/想做什么
需求:具体想要什么
约束:有什么特殊要求(可选)

实例:

背景:我是一名新手养猫人
需求:帮我写一篇挑选猫粮的攻略
约束:预算2000以内

示例展示

代码改写

提示词示例

USER
下面这段的代码的效率很低,且没有处理边界情况。请先解释这段代码的问题与解决方法,然后进行优化:
def fib(n):
    if n <= 2:
        return n
    return fib(n-1) + fib(n-2)

样例输出

代码问题分析

1. 效率问题

  • 原因:这段代码使用了递归的方式计算斐波那契数列,但没有使用任何优化手段(如记忆化或动态规划),导致重复计算了大量子问题。

  • 示例

    • 计算 fib(5) 时,会重复计算 fib(3)fib(2) 多次。

    • 时间复杂度为 O(2^n),指数级增长,效率极低。

2. 边界情况未处理

  • 问题:代码假设输入的 n 是正整数,但没有处理以下情况:

    1. n 为负数或零(斐波那契数列通常定义在正整数上)。

    2. n 为非整数(如浮点数)。

    3. n 非常大时,递归深度过深可能导致栈溢出。


解决方法

1. 优化效率

  • 使用 记忆化(Memoization)动态规划(Dynamic Programming) 来避免重复计算。

  • 或者使用 迭代法,避免递归带来的额外开销。

2. 处理边界情况

  • 检查输入是否为有效正整数。

  • 对于大数问题,可以使用迭代法或矩阵快速幂等高效算法。


优化后的代码

方法 1:动态规划(迭代法)

def fib(n):
    # 处理边界情况
    if not isinstance(n, int) or n < 0:
        raise ValueError("Input must be a non-negative integer.")
    if n <= 1:
        return n

    # 动态规划:迭代计算
    a, b = 0, 1
    for _ in range(2, n + 1):
        a, b = b, a + b
    return b

方法 2:记忆化递归

def fib(n, memo={}):
    # 处理边界情况
    if not isinstance(n, int) or n < 0:
        raise ValueError("Input must be a non-negative integer.")
    if n <= 1:
        return n

    # 检查是否已经计算过
    if n not in memo:
        memo[n] = fib(n - 1, memo) + fib(n - 2, memo)
    return memo[n]

方法 3:矩阵快速幂(高效算法,适合大数)

def fib(n):
    # 处理边界情况
    if not isinstance(n, int) or n < 0:
        raise ValueError("Input must be a non-negative integer.")
    if n <= 1:
        return n

    def matrix_mult(a, b):
        return [
            [a[0][0] * b[0][0] + a[0][1] * b[1][0], a[0][0] * b[0][1] + a[0][1] * b[1][1]],
            [a[1][0] * b[0][0] + a[1][1] * b[1][0], a[1][0] * b[0][1] + a[1][1] * b[1][1]],
        ]

    def matrix_pow(mat, power):
        result = [[1, 0], [0, 1]]  # 单位矩阵
        while power > 0:
            if power % 2 == 1:
                result = matrix_mult(result, mat)
            mat = matrix_mult(mat, mat)
            power //= 2
        return result

    # 使用矩阵快速幂计算斐波那契数
    mat = [[1, 1], [1, 0]]
    result_mat = matrix_pow(mat, n - 1)
    return result_mat[0][0]

性能对比

方法时间复杂度空间复杂度适用场景
原始递归O(2^n)O(n)(栈空间)小规模数据,不推荐使用
动态规划(迭代法)O(n)O(1)中小规模数据,推荐使用
记忆化递归O(n)O(n)中小规模数据,代码简洁
矩阵快速幂O(log n)O(1)大规模数据,高效但代码复杂

示例运行

输入:

print(fib(10))  # 输出 55
print(fib(50))  # 输出 12586269025

边界测试:

print(fib(0))   # 输出 0
print(fib(1))   # 输出 1
print(fib(-1))  # 抛出 ValueError

总结

  • 原始代码问题:效率低(指数级时间复杂度),未处理边界情况。

  • 优化方法

    1. 使用动态规划(迭代法)或记忆化递归优化效率。

    2. 处理输入边界情况,确保代码健壮性。

    3. 对于大规模数据,可以使用矩阵快速幂进一步优化。```

代码解释

提示词示例

USER
请解释下面这段代码的逻辑,并说明完成了什么功能:
// weight数组的大小 就是物品个数
for(int i = 1; i < weight.size(); i++) { // 遍历物品
for(int j = 0; j <= bagweight; j++) { // 遍历背包容量
if (j < weight[i]) dp[i][j] = dp[i - 1][j];
else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);
}
}

样例输出
这段代码实现了一个经典的 0-1 背包问题 的动态规划解法。它的目标是:在给定的背包容量限制下,选择一些物品装入背包,使得背包中物品的总价值最大。


代码逻辑分析

1. 变量定义

  • weight:一个数组,weight[i] 表示第 i 个物品的重量。

  • value:一个数组,value[i] 表示第 i 个物品的价值。

  • bagweight:背包的最大容量。

  • dp:一个二维数组,dp[i][j] 表示前 i 个物品在背包容量为 j 时的最大价值。

2. 外层循环:遍历物品

for(int i = 1; i < weight.size(); i++)
  • 遍历每个物品,i 从 1 开始(因为 i = 0 的情况已经在初始化中处理)。

  • weight.size() 是物品的总数。

3. 内层循环:遍历背包容量

for(int j = 0; j <= bagweight; j++)
  • 遍历每个可能的背包容量,j 从 0 到 bagweight

4. 状态转移

  • 情况 1:当前物品重量大于背包容量

    if (j < weight[i]) dp[i][j] = dp[i - 1][j];

    • 如果当前物品的重量 weight[i] 大于当前背包容量 j,则不能选择该物品。

    • 此时的最大价值与前 i-1 个物品在容量 j 时的最大价值相同,即 dp[i][j] = dp[i - 1][j]

  • 情况 2:当前物品重量小于等于背包容量

    else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);

    • 如果当前物品的重量 weight[i] 小于等于当前背包容量 j,则可以选择是否将该物品放入背包。

    • 比较两种选择的价值:

      1. 不放入dp[i - 1][j],即前 i-1 个物品在容量 j 时的最大价值。

      2. 放入dp[i - 1][j - weight[i]] + value[i],即前 i-1 个物品在容量 j - weight[i] 时的最大价值,加上当前物品的价值。

    • 取两者中的较大值作为 dp[i][j]


功能总结

这段代码通过动态规划解决了 0-1 背包问题,具体功能如下:

  1. 输入

    • weight:每个物品的重量。

    • value:每个物品的价值。

    • bagweight:背包的最大容量。

  2. 输出

    • dp[weight.size() - 1][bagweight]:在给定背包容量下,能够装入物品的最大总价值。

  3. 核心思想

    • 通过填表法(动态规划)逐步计算每个子问题的最优解,最终得到全局最优解。


示例说明

假设:

  • weight = [2, 3, 4, 5](物品重量)

  • value = [3, 4, 5, 6](物品价值)

  • bagweight = 8(背包容量)

动态规划表(dp 表)的构建过程:

物品 \ 容量012345678
0000000000
1 (2, 3)003333333
2 (3, 4)003447777
3 (4, 5)003457899
4 (5, 6)0034578910
  • 最终结果:dp[4][8] = 10,即在容量为 8 的背包中,最大价值为 10。


优化建议

  1. 空间优化

    • 可以将二维数组 dp 优化为一维数组,因为 dp[i][j] 只依赖于 dp[i - 1][...]

    • 优化后的代码:

      vector<int> dp(bagweight + 1, 0);
      for(int i = 0; i < weight.size(); i++) {
          for(int j = bagweight; j >= weight[i]; j--) {
              dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);
          }
      }

  2. 边界处理

    • 需要确保 weightvalue 数组的大小一致,且 bagweight 为非负整数。


总结

这段代码通过动态规划解决了 0-1 背包问题,核心思想是通过填表法逐步计算每个子问题的最优解,最终得到全局最优解。通过优化空间复杂度,可以进一步提升代码效率。

结论

DeepSeek 是一款功能强大且易于使用的工具,适用于多种场景。通过本教程,可以快速掌握其基本和高级功能,提升工作效率
。掌握 DeepSeek 的提问技巧可以帮助您更精准地获取答案,提高内容产出效率
此外,文件附件是清华大学新闻与传播学院新媒体研究中心元宇宙文化实验室的余梦珑博士后团队推出的《DeepSeek从入门到精通》手册,内容丰富,从基础知识到实用技巧,再到进阶应用,都有详细阐述,是一份非常有价值的学习资料

资源下载地址

百度网盘:https://pan.baidu.com/s/1v-WquId3uany5akzd5hAtQ?pwd=5kt3

去下载
温馨提示:本资源来源于互联网,仅供参考学习使用。若该资源侵犯了您的权益,请 联系我们 处理。

相关文章

neo4j部署手册
Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。
DataX和DataX-WEB 安装步骤
DataX 是阿里云 DataWorks数据集成 的开源版本,在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、 MaxCompute(ODPS)、Hologres、DRDS, databend 等各种异构数据源之间高效的数据同步功能。
K8S集群搭建手册(集群版)
kubernetes,简称K8s,是用8代替名字中间的8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。
Apollo部署手册
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

评论

快捷导航

把好文章收藏到微信

打开微信,扫码查看

关闭

还没有账号?立即注册