第三门课:结构化机器学习项目-机器学习策略

文章目录

  • 1 机器学习策略一
    • 1.1 为什么是ML策略?
    • 1.2 正交化
    • 1.3 单一数字评估指标
    • 1.4 满足和优化指标
    • 1.5 训练、开发及测试集划分
    • 1.6 开发集和测试集的大小
    • 1.7 什么时候改变开发、测试集和指标?
    • 1.8 为什么是人的表现?
    • 1.9 可避免偏差
    • 1.10 理解人的表现
    • 1.11 超越人的表现
    • 1.12 改善你的模型的表现
  • 2 机器学习策略二
    • 2.1 进行误差分析
    • 2.2 清除标注错误的数据
    • 2.3 快速搭建第一个系统,并进行迭代
    • 2.4 使用来自不同分布的数据进行训练和测试
    • 2.5 数据分布不匹配时的偏差与方差的分析
    • 2.6 处理数据不匹配问题
    • 2.7 迁移学习
    • 2.8 多任务学习
    • 2.9 什么是端到端的深度学习?
    • 2.10 是否要使用端到端的深度学习?

1 机器学习策略一

1.1 为什么是ML策略?

改善系统的策略:
1、收集更多数据
2、训练集多样性(如,识别猫,收集各种姿势的猫,以及反例)
3、训练的时间更长一些
4、尝试不同的优化算法(如 Adam优化)
5、尝试规模 更大 / 更小 的神经网络
6、尝试 DropOut 正则化
7、尝试添加 L2 正则化
8、修改网络架构(修改激活函数,隐藏单元数目)
需要判断哪些是值得一试的,哪些是可以舍弃的

1.2 正交化

1、 要弄好一个监督学习系统,要确保四件事情

1> 确保至少系统在训练集上得到的结果不错,所以训练集上的表现必须通过某种评估,达到能接受的程度。
2> 在训练集上表现不错之后,希望系统也能在开发集上有好的表现
3> 希望系统在测试集上有好的表现
4> 希望系统在测试集上系统的成本函数在实际使用中表现令人满意

2、
1>在成本函数上不能很好地拟合训练集

	可以训练更大的网络
	可以切换到更好的优化算法<如Adam优化算法>

2>在训练集上做得很好,但开发集<验证集>不行

可以通过正则化进行调节

3>在开发集上做的不错,但测试集不行,意味着对开发集过拟合了

   可以使用更大的开发集

4>在测试集上做得很好,但无法给应用用户提供良好的体验

可以改变开发集或成本函数

注:训练神经网络时,一般不使用early stopping,如果使用,那么对训练集的拟合就不太好,但它同时也用来改善开发集的表现,所以它没那么正交化。

1.3 单一数字评估指标

查准率§和查全率®
查准率:如果分类器A有95%的查准率,这意味着你的分类器说这图有猫的时候,有95%的机会真的是猫。
查全率:如果分类器A查全率是90%,这意味着对于所有的图像,比如说你的开发集都是真的猫图,分类器准确地分辨出了其中的90%。
在这里插入图片描述

结合查准率和查全率的标准方法是F1分数(P和R的调和平均数)
在这里插入图片描述
我们快速选出分类器A,淘汰B
除了F1 分数之外,我们还可以使用平均值作为单值评价指标来对模型进行评估
在这里插入图片描述

总:单实数评估指标可以提高做决策的效率

1.4 满足和优化指标

在这里插入图片描述

Accuracy是优化指标,Running time是满足指标。
只要运行时间小于100毫秒,用户就不在乎运行时间是100毫秒还是50毫秒,在这种情况下分类器B最好,因为在所有运行时间小于100毫秒的分类其中,它的准确度是最高的。
考虑N个指标,有时候选择其中一个作为优化指标是合理的。
尽量优化那个指标,然后剩下 N-1个指标都是满足指标,意味着只要它们达到一定阈值,你不再关心指标在阈值内的大小。

1.5 训练、开发及测试集划分

如何设立开发集和测试集?
开发集(dev set)有时也叫(development set),有时称为保留交叉验证集(hold out cross validation set)。
机器学习中的工作流程是你尝试很多思路,用训练集训练不同的模型,然后使用开发集来评估不同的思路,然后选择一个,然后不断迭代去改善开发集的性能,直到最后你可以得到一个令你满意的成本,然后你再用测试集去评估。
设立开发集以及评估指标:定义类要瞄准的目标
设立训练集的方式:会影响逼近那个目标有多快
在这里插入图片描述

前四个作为开发集,后四个作为测试集,这个想法非常糟糕,因为开发集与测试集来自不同的分布。
建议:将所有数据随机洗牌,放入开发集和测试集,所以开发集和测试集都有来自八个地区的数据,并且开发集和测试集来自同一分布,这分布就是所有数据混在一起。

1.6 开发集和测试集的大小

在这里插入图片描述

测试集的目的是完成系统开发之后,测试集可以评估投产系统的性能,及评估最终的成本偏差。
不单独分出一个测试集也是可以的,但不建议在搭建系统时省略测试集,因为有个单独的测试集比较安心。因为可以使用这组不带偏差的数据来测量系统的性能。

1.7 什么时候改变开发、测试集和指标?

例:构建一个猫分类器,试图找到很多猫的照片,向爱猫人士用户展示,决定使用的指标是分类错误率。所以算法A和B分别有3%错误率和5%错误率,所以算法A似乎做得更好。但是算法A由于某些原因,把很多色情图片分类成猫了。从用户接受的角度来看,算法B实际上是一个更好的算法,因为它不让任何色情图像通过。
在这里插入图片描述

这个公式就统计了分类错误的样本。这个评估指标的问题在于,它对色情图片和非色情图片一视同仁。

改进:引入一个权重项<赋予色情图片更大的权重,让算法将色情图分类为猫图时,错误率快速变大>
在这里插入图片描述

并进行归一化,使错误率仍保持在0-1之间
在这里插入图片描述

我们定义了一个评估指标帮助我们更好的把分类器排序,能够区分出他们在识别色情图片的不同水平,这实际上是一个正交化的例子

注:在处理机器学习时,分为两个独立的步骤,第一步是设定目标,第二步在逼近目标的时候,也需学习算法对某个成本函数优化,最小化训练集上的损失。
可以修改这个,引入权重,最后修改这个归一化常数。
在这里插入图片描述

总方针:如果当前指标和当前用来评估的数据和真正关心必须做好的事情关系不大,那就应该更改你的指标或者开发测试集,让它们能够更好地反应算法需要处理好的数据。

1.8 为什么是人的表现?

在这里插入图片描述

超越人类表现,进展会慢下来的原因:
1> 人类水平在很多任务中离贝叶斯最优错误率已经不远了,人们非常擅长看图像,分辨里面有没有猫或者听写音频。所以,当你超越人类的表现之后也许没有太多的空间继续改善了。
2> 只要你的表现比人类的表现更差,那么实际上可以使用某些工具来提高性能。一旦你超越了人类的表现,这些工具就没那么好用了。

1.9 可避免偏差

在这里插入图片描述

算法在训练集上的表现和人类水平的表现有很大差距的话,说明算法对训练集的拟合并不好,重点放在减少偏差上。
可避免偏差:贝叶斯错误率或者对贝叶斯错误率的估计和训练错误率之间的差值称为可避免偏差。
即7%的可避免偏差<7%衡量了可避免偏差大小,而2%衡量了方差大小>

1.10 理解人的表现

在这里插入图片描述

最优错误率肯定在5%以下,可以用0.5%来估计贝叶斯错误率

贝叶斯错误率或者说贝叶斯错误率的估计和训练错误率直接的差值就衡量了所谓的可避免偏差,这(训练误差与开发误差之间的差值)可以衡量或者估计你的学习算法的方差问题有多严重。
在这里插入图片描述

1.11 超越人的表现

在这里插入图片描述

一旦超过0.5%这个门槛,要进一步优化机器学习问题就没有明确的选项和前进的方向了。
机器学习超越人类水平的实例:
1> 网络广告:估计某个用户点击广告的可能性
2> 提出产品建议,推荐电影或书籍之类的任务。
3> 物流预测,从A到B开车需要多久,或者预测快递车从A开到B需要多少时间。
4> 预测某人会不会偿还贷款,这样你就能判断是否批准这人的贷款

1.12 改善你的模型的表现

训练集误差与贝叶斯估计误差之间的差距:可避免偏差
训练集误差与开发集误差之间的差距:方差
减少可避免方差:

更大规模的模型
训练更久、迭代次数更多
更好的优化算法(Momentum、RMSprop、Adam)
更好的新的神经网络结构
更好的超参数
改变激活函数、网络层数、隐藏单元数
其他模型(循环神经网络<CNN>,卷积神经网络<RNN>)

改进方差:

收集更多的数据去训练
正则化(L2正则、dropout正则、数据增强)
更好的新的神经网络结构
更好的超参数

2 机器学习策略二

2.1 进行误差分析

<猫分类器中>收集n个预测错误的开发集样本,手动检查
(错误分类的图片里面有多少比例是狗🐶,假如错误率10%,其中狗占5%,那么你完全解决了狗的问题,能降低错误率到 9.5%,结合你花费的时间,评估下值不值当;如果错误分类中,狗占50%,那么解决狗的问题,就能降低错误率到 5%,还是很值得一试的)
通常做法,统计各种误差的比例,检查哪种误差占比较高,优先解决
在这里插入图片描述

2.2 清除标注错误的数据

在这里插入图片描述

倒数第二张是标记错误的图片,即为标记错误的样本。
深度学习算法对于训练集中的随机错误是相当健壮的。如果错误足够随机,那么放着这些错误不管可能也没问题。

如果在开发集和测试集有错误标记的样本:
在这里插入图片描述

如果你要更正标签,请注意:
同时在开发集和测试集上操作(同一分布)
检查了判断错误的样本,也需要考虑到判断正确的样本(可能是标签就错了,恰好预测的一致),但通常此步不会做,太耗时了(比如98%的判对了,检查98%的数据?太多了)

只修正开发集/测试集的标签,而不修正训练集的标签是合理的,训练集通常比前2者大得多,算法是相当健壮的。

2.3 快速搭建第一个系统,并进行迭代

快速设立开发集和测试集还有指标,如果目标定错了,之后改也是可以的
找到训练集,并进行训练
在开发及和测试集,评估指标表现如何
建立好第一个系统之后,就可以用到偏差方差分析,还有错误分析来确定下一步优先做什么。

2.4 使用来自不同分布的数据进行训练和测试

在这里插入图片描述

第一种选择:随机分配到训练、开发和测试集中,开发集、测试集各包含2500个样本,训练集有205000个样本。
结果:观察开发集,2500个样本很多都是来自网页下载的图片,并不是真正关心的 数据分布,真正要处理的是来自手机的图片。建立开发集的目的是瞄准目标,而这个选择瞄准目标的方式,大部分精力用于优化来自网页下载的图片。

第二种选择:训练集包含来自网页的20万图片以及来自手机拍摄5000张图片,开发集是2500张来自应用的图片,测试集也是2500张来自应用的图片。
结果:好处:瞄准的目标就是想要处理的目标。训练集和开发集、测试集的分布不一样,在长期能够给你带来更好的系统性能。

2.5 数据分布不匹配时的偏差与方差的分析

在这里插入图片描述

训练-开发集是从训练集的分布中挖出来的,因此训练-开发集与训练集具有相同的分布。即开发集与测试集来自同一分布,而训练集与训练-开发集来自同一分布。

训练误差&训练-开发误差,差距 8 %,但是两者数据是同分布的,所以问题是泛化性能差,高方差问题
训练误差&训练-开发误差,差距0.5 %,方差问题很小,但是在开发集上误差为 10%,训练-开发集&开发集上的数据,模型都没有在上面训练过,由于他们是不同分布,模型擅长前者,而你关心的开发集,模型表现不好,这称之为数据不匹配
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.6 处理数据不匹配问题

发现有严重的数据不匹配,亲自做误差分析,了解训练集和开发集/测试集的具体差异
为了避免对测试集过拟合,要做误差分析,应该人工去看开发集而不是测试集
例:
1、开发一个语音激活的后视镜应用,你可能要听一下开发集的样本,弄清楚开发集和训练集有什么不同:发现很多开发集样本汽车噪音很多,后视镜经常识别错误街道号码。
2、如果你发现车辆背景噪音是主要误差来源,那么你可以模拟车辆噪声数据;
或者你发现很难识别街道号码,你可以有意识地收集更多人们说数字的音频数据,加到你的训练集里
3、如果目标是让训练数据更接近开发集,其中一种技术是人工合成数据

人工数据合成有一个潜在问题:你在安静的背景里录得 10000小时 音频数据,你只录了1小时车辆背景噪音,将这1小时汽车噪音循环放10000次,并叠加到上面的语音,结果:人听起来,这个音频没什么问题,但是有一个风险,有可能你的学习算法对这1小时汽车噪音过拟合,你只录了1小时汽车噪音,只模拟了全部数据空间的一小部分(噪声过于单一),所以找 10000 小时不同的噪声叠加在音频上是合理的。

2.7 迁移学习

在这里插入图片描述

如果放射科数据很小,则需要重新训练最后一层的权重,就是w[L]和b[L],并保持其他参数不变。即只需训练输出层前的最后一层,或者也许是最后一两层。
如果有很多数据,也许可以重新训练网络中的所有参数。

如果你重新训练神经网络中的所有参数,那么这个在图像识别数据的初期训练阶段,有时称为预训练,因为你在用图像识别数据去预先初始化,或者预训练神经网络的权重。然后,如果你以后更新所有权重,然后在放射科数据上训练,有时这个过程叫微调
在这里插入图片描述

迁移学习发挥作用的场合:
在迁移来源问题中有很多数据,但迁移目标问题没有那么多数据。(例如:你有100万张图像识别数据,而只有100张X射线图像)
数据量如果反过来了,迁移学习可能就没有意义了(没有太大的帮助)

2.8 多任务学习

在这里插入图片描述

输入图像x(i),这里有4个标签,即y(i)是一个4*1向量。整体来看这个训练集标签和以前类似,我们将训练集的标签水平堆叠起来
在这里插入图片描述

则对于整个训练集的平均损失:
在这里插入图片描述

L指的是logistic损失:
在这里插入图片描述

整个训练集的平均损失和之前分类猫的例子主要区别在于,现在你要对j=1到4求和
与softmax回归的主要区别在于,与softmax回归不同,softmax将单个标签分配给单个样本

多任务学习什么时候有意义?

1>	如果你训练的一组任务,可以共用低层次特征
2>	单项任务可以从多任务学习得到很大性能提升,前提:其他任务数据总量加起来必须比单个任务的数据量大的多
3>	训练一个足够大的神经网络,多任务学习肯定不会或者很少会降低性能,比单独训练神经网络来单独完成各个任务性能要更好

注:多任务学习 的使用频率要低于迁移学习计算机视觉
一个例外是物体检测,人们经常训练一个神经网络同时检测很多不同物体,这比训练单独的神经网络来检测视觉物体要更好。

2.9 什么是端到端的深度学习?

以前有一些数据处理系统或者学习系统,它们需要多个阶段的处理。那么端到端深度学习就是忽略所有这些不同的阶段,用单个神经网络代替它
例:语音识别为例,端到端深度学习做的是,训练一个巨大的神经网络,输入就是一段音频,输出直接是听写文本。

端到端深度学习的挑战之一:需要大量数据才能让系统表现良好。

人脸识别门禁:
比起一步到位,把这个问题分解为两个更简单的步骤。
首先,弄清楚脸在哪里:观察一张图,找出人脸所在的位置,把人脸图像框出来,有很多标签数据(x,y),x是图片,y是人脸的位置
第二步,看着脸,弄清楚这是谁:(x,y)其中x是门禁系统拍摄的图像,y是那人的身份。

2.10 是否要使用端到端的深度学习?

端到端深度学习的好处:

1>首先端到端(end-to-end)学习真的只是让数据说话。如果有足够多的数据,直接输入去训练神经网络,更能捕获数据中的信息,而不是引入人类的成见
2>所需手工设计的组件更少,所以这也许能够简化你的设计工作流程,你不需要花太多时间去手工设计功能。

端到端深度学习的缺点:

1>它可能需要大量的数据。
2>它排除了可能有用的手工设计组件

在构建一个新的机器学习问题时,在决定是否使用端到端深度学习,关键问题(key question)是,你有足够的数据能够直接学到从x映射到y足够复杂的函数吗?

注:纯粹的端到端深度学习方法,前景不如更复杂的多步方法(比如人脸识别,人脸每次的位置是变化的,先识别出有人脸,然后把人脸区域截取出来,再对其进行预测,分步进行)。因为目前能收集到的数据,还有我们现在训练神经网络的能力是有局限的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/466148.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

贪心算法(算法竞赛、蓝桥杯)--线段覆盖

1、B站视频链接&#xff1a;A29 贪心算法 P1803 线段覆盖_哔哩哔哩_bilibili 题目链接&#xff1a;凌乱的yyy / 线段覆盖 - 洛谷 #include <bits/stdc.h> using namespace std;struct line{int l,r;bool operator<(line &b){return r<b.r;//重载小于号,按右端…

FreeRTOS的列表和列表项

这个章节的内容是非常重要的&#xff0c;因为 FreeRTOS 的源码实现离不开列表&#xff0c;所以说大家如果想要看懂 FreeRTOS 的源码&#xff0c;看它是如何实现的&#xff0c;那么这个列表你必须要掌握。 1. 列表和列表项 1.1 列表和列表项的简介 列表 是 FreeRTOS 中的一个…

【递归专题】【蓝桥杯备考训练】:有序分数、正则问题、带分数、约数之和、分形之城【已更新完成】

目录 1、有序分数&#xff08;usaco training 2.1&#xff09; 2、正则问题&#xff08;第八届蓝桥杯省赛C A组 & Java A组&#xff09; 3、带分数&#xff08;第四届蓝桥杯省赛Java A组/B组 & C B组/C组&#xff09; 4、约数之和&#xff08;《算法竞赛进阶指南》…

面试笔记——Redis(使用场景、面临问题、缓存穿透)

Redis的使用场景 Redis&#xff08;Remote Dictionary Server&#xff09;是一个内存数据结构存储系统&#xff0c;它以快速、高效的特性闻名&#xff0c;并且它支持多种数据结构&#xff0c;包括字符串、哈希表、列表、集合、有序集合等。它主要用于以下场景&#xff1a; 缓…

虹科技术|PCAN系列网关内部存储空间解析:EEPROM与Flash的集成应用

导读&#xff1a;网关设备是确保数据流畅通信的关键。虹科PCAN系列网关凭借卓越性能和创新技术&#xff0c;为众多应用提供了高效稳定的解决方案。本文将深入探讨虹科PCAN系列网关内部存储空间&#xff0c;特别是EEPROM和SPI Flash的配置与利用&#xff0c;并解析如何通过C编程…

每日一题——LeetCode1694.重新格式化电话号码

方法一 模拟&#xff1a; 首先去除number里面的破折号和空格&#xff0c;取出纯数字组成的字符串str。 对于str每三个数分成一组&#xff0c;加一个破折号&#xff0c;当str的长度小于等于4时再分情况讨论&#xff0c;如果等于4就分为22形式&#xff0c;如果小于4&#xff0c…

flask之ssti [WesternCTF2018]shrine1

打开题目 整理一下&#xff0c;代码: import flask import osapp flask.Flask(__name__) app.config[FLAG] os.environ.pop(FLAG) app.route(/)def index():return open(__file__).read()app.route(/shrine/)def shrine(shrine):def safe_jinja(s):s s.replace((, ).replac…

基于springboot+vue的乡政府管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

奇数乘积(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int i 1;int j 3;//循环运算&#xff1b;while (j < 12){//运算&#xff1b;i i * j;//改变数值&#xff1b;j 2…

多线程服务器适用场合

前提 进程”指的是fork(2)系统调用的产物 线程”指的是pthread_create()的产物,因此是宝贵的那种原生线程。而且Pthreads是NPTL的,每个线程由clone(2)产生,对应一个内核的task_struct。 Pthreads是一组线程操作的标准&#xff0c;NPTL是 Native POSIX Thread Library 的缩写&…

成都规模最大的直播基地在哪里

天府锋巢直播产业基地&#xff0c;位于成都这座历史文化与现代气息交织的城市&#xff0c;不仅是成都规模最大的直播产业园&#xff0c;更是西南地区乃至全国范围内具有影响力的直播产业聚集地。在这里&#xff0c;直播产业与科技创新、文化创意、教育培训等多个领域深度融合&a…

工业AMR机器人如何实现规模化的柔性生产

在当下高度复杂的工业生产环境中&#xff0c;机器人如何实现规模化的柔性生产&#xff0c;已成为业界关注的焦点。特别是在追求高效率、高质量的生产过程中&#xff0c;团队协作的重要性愈发凸显。富唯智能一体化AMR控制系统&#xff0c;作为机器人的核心指挥部&#xff0c;犹如…

Android基础开发-读写短信

1、利用ContentObserver监听短信 内容观察器ContentObserver给目标内容注册一个观察器&#xff0c;目标内容的数据一旦发生改变&#xff0c;观察器规定好的动作马上触发&#xff0c;从而执行开发者预定义的代码。 参数原理&#xff1a; notifyForDescendents 通知子孙后代 …

C++ 万物起源:类与对象(一)

目录 一、C与C语言的区别 1.1类的引入 二、C类 2.1类的概念与定义 2.2类的访问限定符与封装 2.2.1C中struct和class的区别 2.3封装 2.4类的作用域与实例化 三、类对象模型 3.1类对象的存储模式 3.2结构体内存对齐规则 一、C与C语言的区别 C语言是面向过程的&#xf…

毕设学习进展周报

文章目录 3.11-3.18 3.11-3.18 1.阅读ACL文献并记录 2.查找相关资料学习在阿里云部署ChatGLM3-6B 参考&#xff1a;https://blog.csdn.net/H66778899/article/details/135630030 # 运行 streamlit run /mnt/workspace/ChatGLM3/conposite_demo/main.py可以得到&#xff1a;…

jscpd对项目进行查重(支持150+类语言)

jscpd jscpd 查重时能够跳过标记为忽略的块和新行以及空符号和注释&#xff08;不支持尖括号注释<!-- --&#xff01;>&#xff09;&#xff0c;重复率判定依据为一定长度标识符的MD5值是否相同。 安装 npm install -g jscpd配置参数(查看更多) OptionTypeDefaultDes…

Windows系统安装GeoServe结合内网穿透实现公网访问本地位置信息服务

文章目录 前言1.安装GeoServer2. windows 安装 cpolar3. 创建公网访问地址4. 公网访问Geo Servcer服务5. 固定公网HTTP地址 前言 GeoServer是OGC Web服务器规范的J2EE实现&#xff0c;利用GeoServer可以方便地发布地图数据&#xff0c;允许用户对要素数据进行更新、删除、插入…

抖音视频批量下载工具|无水印视频提取软件

抖音视频批量下载工具安装教程 一&#xff1a;双击安装包 二&#xff1a;进入安装主界面 然后点击接收Q:290615413 三&#xff1a;接受后进入安装模式 设置好安装路径 系统默认的是D盘然后点击解压 四&#xff1a;点击解压后安装等待安装 安装成功后桌面会有 抖音视频批量提取工…

Python进程与线程开发

目录 multiprocessing模块 线程的开发 threading模块 setDaemon 死锁 线程间的通信 multiprocessing模块 运行python的时候&#xff0c;我们都是在创建并运行一个进程&#xff0c;(linux中一个进程可以fork一个子进程&#xff0c;并让这个子进程exec另外一个程序)。在pyt…

算法设计与分析(贪心法)

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…