从GIPHY下载保存gif动图的方法,免费且快速

在GIPHY找素材,看到喜欢的动图点保存,发现是不能用的网页WEBP格式,那要怎么操作,才能把喜欢的素材保存为GIF或者MP4格式呢?
方法很简单,只需3步,借助这个网站就可以实现:https://ezgif.com/,具体实操方法如下。第一步:找到想要的动图,右键“在新的标签页中打开链接”

依次点击”share”➡️ “orignal”➡️ “Copy Gif Link”

打开网址(https://ezgif.com/)➡️ 点击”Video to GIF”➡️ 将复制好的链接粘贴到框里➡️ 点击”Upload video”解析➡️ 后续点击”Save”即可保存为GIF格式

AI运镜技巧提示词

一、基础镜头类型

1. 特写镜头(Close-up Shot):聚焦拍摄对象的局部细节(如人脸、手部、物体纹理),突出表情、质感或情绪。

2. 中景镜头(Medium Shot):拍摄人物腰部以上或物体局部,平衡人物动作与环境关系,常用于对话场景。

3. 全景镜头(Full Shot/Panoramic Shot):展示人物全身或场景全貌,强调环境布局和人物在空间中的位置。

4. 远景镜头(Long Shot):从远距离拍摄广阔场景(如山脉、城市、人群),营造氛围或空间纵深感。

5. 过肩镜头(Over-the-Shoulder Shot):以旁观者视角,从人物肩膀后方拍摄对话场景,增强代入感和互动感。

6. 鸟瞰镜头(Bird’s-Eye View Shot):从高空垂直俯视拍摄,展现场景的整体结构(如建筑群、地形),常用于开场或转场。

7. 低角度镜头(Low-Angle Shot):从低处仰拍对象,使主体显得高大、威严(如拍摄人物、建筑),传递力量感。

8. 高角度镜头(High-Angle Shot):从高处俯拍对象,使主体显得弱小或被环境包围,营造压抑、孤独感。

9. 主观镜头(Subjective Shot):模拟角色视角拍摄,让观众代入角色视线(如第一人称视角看手机、走路)。

10. 客观镜头(Objective Shot):以中立视角拍摄,如实呈现场景,不带有明显的角色主观感受。

图片

二、动态镜头语言

1. 平移镜头(Pan Shot):摄像机水平左右移动拍摄,展示广阔场景或跟随主体移动(如扫视人群、追踪运动物体)

2. 俯仰镜头(Tilt Shot): 摄像机垂直上下移动拍摄,从地面摇向天空或反之,强调高度或层次感(如拍摄高楼、树木)。

3. 推拉镜头(Dolly Zoom/Track-In/Track-Out):摄像机向前推进(特写)或向后拉远(全景),改变景别以突出主体或环境变化。

4. 跟拍镜头(Follow Shot):镜头跟随运动主体(如人物行走、车辆行驶),保持主体在画面中心,增强动感和紧张感。

5. 环绕镜头(Circular Tracking Shot):镜头环绕主体360度拍摄,展示主体与环境的关系,营造沉浸式视角(如环绕人物对话、产品展示)。

6. 手持镜头(Handheld Shot):模拟手持摄像机的轻微晃动,增加画面真实感和紧张感,常用于纪录片或动作场景。

7. 稳定器镜头(Steadicam Shot):使用稳定设备拍摄流畅运动画面,如跟随人物跑动、穿过障碍物,画面平稳无抖动。

8. 变焦镜头(Zoom Shot):通过镜头焦距变化,快速从远景切换到特写(推焦)或反之(拉焦),引导观众注意力。

9. 甩镜头(Whip Pan):快速平移镜头造成画面模糊,用于场景切换或转场,增强节奏感(如从人脸甩到窗外场景)。

10. 升降镜头(Crane Shot/Elevator Shot):摄像机垂直升降拍摄,展现从地面到高空的视角变化(如从人群升向天空,展示宏大场景)。

图片

三、创意与特殊效果

1. 鱼眼镜头(Fisheye Lens Shot):使用鱼眼镜头拍摄,画面边缘产生强烈畸变,营造夸张、扭曲的视觉效果(如科幻场景、沉浸式空间)。

2. 分屏镜头(Split-Screen Shot):画面分割为多个区域,同时展示多个场景或视角(如对话双方、对比画面、多机位同步)。

3. 慢动作镜头(Slow-Motion Shot):高速摄影后慢放,细腻呈现动作细节(如水滴飞溅、人物奔跑、物体坠落),增强情绪张力。

4. 快动作镜头(Time-Lapse Shot):压缩时间流逝,快速展示变化过程(如日出日落、云卷云舒、城市昼夜交替)。

5. 定格镜头(Freeze Frame Shot):画面突然静止,强调某个瞬间(如人物表情、关键动作),常用于剧情高潮或结尾。

6. 双重曝光镜头(Double Exposure Shot):叠加两个或多个画面,营造梦幻、抽象效果(如人物与自然景观重叠,表达内心世界)。

7. 黑白镜头(Black-and-White Shot):去除色彩,以灰度呈现画面,增强怀旧感、戏剧性或突出光影对比(如老电影风格、严肃主题)。

8. 剪影镜头(Silhouette Shot):主体在强光背景下形成黑色轮廓,隐藏细节,突出形态和氛围(如夕阳下的人物、窗前的背影)。

9. 微距镜头(Macro Shot):极致特写微小物体(如昆虫、花瓣、水滴),展现肉眼难见的细节,充满视觉冲击力。

10. 模糊镜头(Out-of-Focus Shot): 画面主体或背景虚化,通过景深控制引导注意力(如前景模糊突出背景人物,反之亦然)。

图片

四、场景与叙事镜头

1. 开场镜头(Opening Shot):视频开头的第一个镜头,用于设定场景基调(如城市全景、主角特写、标志性物体)。

2. 转场镜头(Transition Shot):连接两个场景的过渡镜头(如相似物体叠化、光影变化、动作衔接),使叙事更流畅。

3. 反应镜头(Reaction Shot):拍摄人物对事件的反应(如惊讶、悲伤、微笑),强化情感共鸣(常用于对话或冲突场景)。

4. 动作镜头(Action Shot):聚焦激烈动作场景(如打斗、追逐、爆炸),多用快速剪辑和动态镜头,增强紧张感。

5. 对话镜头(Dialogue Shot):拍摄人物对话,常用过肩镜头、正反打切换,突出互动和情绪交流。

6. 闪回镜头(Flashback Shot):回忆或过去事件的镜头,常用褪色、模糊等效果区分现实与回忆(如黑白画面、柔光滤镜)。

7. 象征镜头(Symbolic Shot):通过物体或场景隐喻主题(如破碎的镜子象征关系破裂,孤鸟象征孤独),增强叙事深度。

8. 空镜头(Empty Shot):无人物的环境镜头(如空房间、自然风光、街道),用于烘托氛围、留白或转场。

9. POV镜头(Point-of-View Shot):同“主观镜头”,直接呈现角色视线所及(如开车时的前方道路、开门看到的场景)。

10. 收尾镜头(Closing Shot):视频结尾的镜头,常呼应开场或升华主题(如主角远去的背影、场景全景、意味深长的特写)。

图片

五、技术与风格化镜头

1. 景深镜头(Deep Focus Shot):画面中前景、中景、背景均清晰对焦,展现丰富细节和空间层次(如复杂场景调度)。

2. 浅景深镜头(Shallow Depth-of-Field Shot):主体清晰,背景虚化,突出主体并柔化干扰元素(如人像摄影、产品特写)。

3. 变形宽银幕镜头(Anamorphic Lens Shot):使用变形镜头拍摄,画面带有椭圆光斑、横向压缩感,呈现电影级质感(常见于院线电影)。

4. 手机镜头(Mobile Phone Camera Shot):模拟手机拍摄的视角(如前置自拍、后置录像),画面可能有轻微畸变或像素感,增强真实感。

5. 监控镜头(CCTV/ Surveillance Shot):模仿监控摄像头的低清、广角、带时间水印的画面,营造悬疑或纪录片风格。

6. 第一人称镜头(First-Person Perspective Shot):完全从角色视角拍摄(如手持武器、操作设备),让观众身临其境(常用于游戏改编或沉浸式叙事)。

7. 双镜头切换(Dual Camera Switch):快速切换两个不同机位的镜头(如近景与远景、人物与物体),增强叙事节奏。

8. 手持环绕镜头(Handheld Circular Shot):手持摄像机环绕主体拍摄,保留轻微晃动,兼具动感与真实感(如采访中的人物环绕)。

9. 动态模糊镜头(Motion Blur Shot):拍摄快速运动物体时故意保留模糊轨迹,强化速度感(如赛车、运动员冲刺)。

10. 斯坦尼康长镜头(Steadicam Long Take):使用斯坦尼康拍摄的长时间连续镜头,一镜到底展现复杂场景调度(如跟拍人物穿越多个场景)。

以上摘自https://mp.weixin.qq.com/s/9vUJ6JlQQOxmLLAtEBt3uQ

以下摘自https://mp.weixin.qq.com/mp/wappoc_appmsgcaptcha?poc_token=HFsTdmij4lz8uqA0yiWPFod2MmlYrYnhGkHrDiNo&target_url=https%3A%2F%2Fmp.weixin.qq.com%2Fs%2FbtmPV2EMp7TkF4ns_19pGQ

先看整体效果:,时长00:34二、基础运镜1、变速镜头案例:一朵生长在雨林里含苞待放的紫色鲜花

图片

提示词:记录一朵雨林花卉从含苞到盛开的过程,速度先慢后快,时长00:05使用范围:自然纪录片与生态摄影、艺术与视觉创作、商业广告与品牌叙事(护肤品广告用慢速镜头表现花瓣露珠渗透)2、低角度平移案例:星球大战峡谷飞梭大赛,两个夸张超大的炫酷发动机在前面两侧飞行,飞梭赛手一边飞速行驶,一边用武器攻击

图片

提示词:低角度从飞梭下方平移到后方,时长00:05使用范围:电影与剧情片(强化角色压迫感、构建悬疑氛围)、建筑与空间摄影(延伸空间纵深感)3、航拍镜头案例:航拍,顶视图城市高楼建筑,一个人物悬浮在城市上空

图片

提示词:航拍镜头,人物先缓慢的向镜头下方下降,再极速的坠落,时长00:05使用范围:战争场面调度(《长津湖》中航拍冰雪山脉下行军的志愿军,突出环境残酷与人类渺小)、科幻场景构建(《沙丘》中无人机俯视沙虫吞噬香料车,强化异星压迫感)、真人秀与综艺(《奔跑吧》航拍游戏场地全景,揭示参与者位置关系与战术布局)4、固定镜头案例:远景一艘孤舟停留在画面左侧,右侧3/4留白仅留飞鸟的剪影

图片

提示词:固定镜头,飞鸟向镜头左边飞去,时长00:05适用范围:戏剧张力爆发——对话场景:昆汀《低俗小说》中双人餐桌对峙,固定镜头迫使观众聚焦台词微表情。时间隐喻载体——安迪·沃霍尔《帝国大厦》8小时固定镜头,用建筑光影变化解构现代时间观念。事件客观记录——法庭审判全程固定机位,避免镜头运动干扰证据可信度。5、下降镜头案例:一条跃出海面的海豚

图片

提示词:镜头下降,镜头随着海豚下降到海面下面拍摄海豚在水下面快速的向前方游动,时长00:05使用范围:空间高度的压缩、视角的转换及重力感的强化(比如:命运坠落隐喻、角色重生视角、极限运动跟拍6、极端特写镜头案例:一个蓝眼睛,眼睛里面有建筑物的倒影

提示词:眼睛里面的建筑物灯光亮起来,时长00:05使用范围:将视觉焦点压缩至微观尺度(通常只展示物体局部或面部几厘米的细节),通过颠覆常规视觉经验、强化物质抽象感与生理冲击力7、定格镜头案例:一个身穿黑色古风服饰的男刀客手拿大刀,站在古建筑的庭院雨夜

图片

提示词:定格时间,人物慢动作,雨水缓缓落下,时长00:05使用范围:将动态影像的某一帧画面突然静止并持续显示的技法,通过时间凝固制造视觉顿挫、情感聚焦或概念提纯。其应用已超越传统影视范畴,延伸至司法、教育、艺术等场景,核心价值在于将流动现实转化为可凝视的标本8、鱼眼镜头案例:鱼眼拍摄,极光

图片

提示词:鱼眼镜头,激光流动起来,画面边缘呈现弯曲效果,时长00:05使用范围:以180°以上超广视角与强烈桶形畸变创造独特的视觉张力,太空舱监控视角——《地心引力》舱内鱼眼镜头增强幽闭感,卓别林式肢体变形:周星驰《功夫》包租婆追逐戏强化滑稽感。

下面摘自https://mp.weixin.qq.com/s/M04jwT5dW6wxdeCX_X0Mbg
360度急速环绕运镜
镜头以魔法师为中心,急速环绕旋转360度,背景的火星,火光冲天的树林和燃烧城堡拉出残影,周围飞溅的火星和远方城堡的轮廓快速掠过,环境中的火光粒子被离心力扯动,营造强烈速度感,保持角色稳定,保持法杖稳定,流畅自然,超高清,4K,史诗级镜头
急速拉升运镜
一道火光束直冲天空,镜头迅速上升从魔法师身前猛然拔升,随着视角急速拉远到云层上,旷野的人影飞速缩小,出现整个峡谷的画面,电影级画质,高分辨率,广角镜头
急速下降运镜
镜头迅速下降右摇,随着镜头右摇,出现一个人骑在龙背上的画面,巨龙振翅飞翔,电影级画质,高分辨率,动态模糊
低视角跟拍运镜
骑着飞龙的人驾驭飞龙在天空向前飞翔,低视角跟拍运镜,专业电影拍摄,动态模糊,低角度仰拍,
第一人称视角
FPV镜头,骑着巨龙的人的第一人称视角,感受扑面而来的疾风,巨龙快速向前飞行,下方是广袤的荒野,远处城堡轮廓若隐若现,两侧环境事物快速掠过,速度感强烈,视觉沉浸感极强,主观镜头,真实感
高空俯拍运镜
无人机视角,全景画面,高空俯拍远距离地上的人群惊慌失措往城堡里奔跑,干裂的大地延伸向远方,人群如蚂蚁般渺小,呈现宏大的逃亡场景,超高清,4K,史诗级镜头

部分光猫开启公网IPv6入站,光猫无需桥接直连

价值不大,这个为研究参考,实际上光猫有PMTU黑洞等问题,最好的方法还是路由拔号


超级密码获取
telnet 192.168.1.1
账号:CMCCAdmin
密码:你的光猫后面的user密码+@C1

超级密码获取方法
插入U盘,
cp /userconfig/cfg/db_ciot_user_cfg.xml /mnt/usb1_1/

然后routerpassview 打开db_ciot_user_cfg.xml 文件

搜 DM name=“User” val=
然后你就可以看见超级密码了

这个超密是有时效性的,失效了就再获取db_ciot_user_cfg.xml 文件查看

开启Telnet
使用超级密码登陆后

访问:http://192.168.1.1:8080/enableTelnet.html

即可启用 telnet,同时页面也有用户名和密码

无视SU密码,进入ROOT
telnet 192.168.1.1 链接到光猫

用户名和密码均是 telnetuser

然后输入英文符号 ; 回车

这时 $ 符号消失就进入root用户了

Login: telnetuser
Password:
$;
sh: syntax error: unexpected ";"
echo $USER
root
开启IPv6入站
默认规则在转发 FORWARD 表中加入了 DROP 丢弃了所有入站请求

是光猫将流量转发给下级路由的,通配 DROP 的规则删掉即可

查看FORWARD表
# 查看所有表
ip6tables -nvL --line-number

#查看FORWARD表
ip6tables -nvL FORWARD --line-numbers

Chain FORWARD (policy ACCEPT 65441 packets, 5616K bytes)
num   pkts bytes target     prot opt in     out     source               destination
1     6546  521K TCPMSS     tcp      any    ppp1.3  anywhere             anywhere             tcp flags:SYN,RST/SYN TCPMSS clamp to PMTU
2     6387  492K TCPMSS     tcp      ppp1.3 any     anywhere             anywhere             tcp flags:SYN,RST/SYN TCPMSS clamp to PMTU
3    4021K  770M rtchain    all      any    any     anywhere             anywhere
4        0     0 DROP       all      veip0.1 any     anywhere             anywhere
5        0     0 DROP       all      veip0.2 any     anywhere             anywhere
6    4018K  769M forward_npt  all      any    any     anywhere             anywhere
7     5476 1857K SKIPLOG    icmpv6    any    br0     anywhere             anywhere             ipv6-icmp destination-unreachable
8      399  137K SKIPLOG    icmpv6    any    ppp1.3  anywhere             anywhere             ipv6-icmp destination-unreachable
9    53521   19M ACCEPT     all      ppp1.3 any     anywhere             anywhere             ctstate RELATED,ESTABLISHED
10       0     0 LOG        tcp      ppp1.3 any     anywhere             anywhere             tcp flags:FIN,SYN,RST,ACK/SYN limit: avg 6/hour burst 5 LOG level alert prefix "Intrusion -> "
11    1801  209K DROP       all      ppp1.3 any     anywhere             anywhere
删除DROP规则
我这里规则是第11条所以删除11条,以自己标号为准

#删除规则11
ip6tables -D FORWARD 11

ip6tables -nvL FORWARD --line-numbers
Chain FORWARD (policy ACCEPT 8 packets, 524 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1     6730  535K TCPMSS     tcp      *      ppp1.3  ::/0                 ::/0                 tcp flags:0x06/0x02 TCPMSS clamp to PMTU
2     7023  542K TCPMSS     tcp      ppp1.3 *       ::/0                 ::/0                 tcp flags:0x06/0x02 TCPMSS clamp to PMTU
3    4024K  770M rtchain    all      *      *       ::/0                 ::/0
4        0     0 DROP       all      veip0.1 *       ::/0                 ::/0
5        0     0 DROP       all      veip0.2 *       ::/0                 ::/0
6    4020K  770M forward_npt  all      *      *       ::/0                 ::/0
7     5496 1860K SKIPLOG    icmpv6    *      br0     ::/0                 ::/0                 ipv6-icmptype 1
8      405  139K SKIPLOG    icmpv6    *      ppp1.3  ::/0                 ::/0                 ipv6-icmptype 1
9    54396   19M ACCEPT     all      ppp1.3 *       ::/0                 ::/0                 ctstate RELATED,ESTABLISHED
10       5   400 LOG        tcp      ppp1.3 *       ::/0                 ::/0                 tcp flags:0x17/0x02 limit: avg 6/hour 

高级规则
在drop之前加入有效,也就是需要排在前面而非最后,这个指定放行的端口,而非全部放行,保证了安全

允许指定端口(假设要放行 22, 80, 443)
ip6tables -I FORWARD 1 -i ppp1.3 -p tcp --dport 22 -j ACCEPT   # SSH
ip6tables -I FORWARD 2 -i ppp1.3 -p tcp --dport 80 -j ACCEPT   # HTTP
ip6tables -I FORWARD 3 -i ppp1.3 -p tcp --dport 443 -j ACCEPT  # HTTPS

允许返回流量(防止连接被中断)
ip6tables -I FORWARD 4 -m state --state ESTABLISHED,RELATED -j ACCEPT
恢复DROP规则
在第11条加入DROP规则,或者重启光猫

ip6tables -I FORWARD 11 -i ppp1.3 -j DROP
持久化
暂未找到能持久化的方法

使用 ip6tables-save 保存的值无变化

网络设置MTU (最大传输单元)

MTU (最大传输单元)是网络设备传输的信息包最大值。对于各种路由器,最佳的MTU值通常都是默认值。


各种应用下的最佳MTU值
设置MTU大小是一个反复试验的过程: 由最大值1500开始下降,直至问题解决。使用下列值之一或许能解决一些由MTU值引起的问题:
1500. 以太网信息包最大值,也是默认值。是没有PPPoE的网络连接的典型设置。是各种路由器、网络适配器和交换机的默认设置
1492. PPPoE 的最佳值
1472. 使用 ping 的最大值 (大于此值的信息包会先被分解)
1468. DHCP的最佳值
1430. PPTP 的最佳值
576. 拨号连接到ISP的标准值
好了,注意一下,以上资料是正常普通情况下MTU的值,不同地区不同运营商不同机房或许也会导致MTU值的不一致!
如何查看MTU值呢?
电脑直接插网线到modem进行ADSL拨号上网,在cmd命令下输入:
netsh interface ipv4 show subinterfaces
如何测试MTU值的最大值?
MTU值越大,发包量就大,发包时间减小,理论上是可以提高网络的。怎样测试自己的MTU值的最大值呢?
首先,在CMD命令下输入:
ping -f -l 1500 www.baidu.com
1500是默认值,先来测试一下是否能达到1500.
命令返回:“需要拆分数据包但是设置 DF。” 说明MTU值过大!我们把MTU值降低试试

ping -f -l 1450 www.baidu.com
PING值出来了,说明MTU设置1450可以通过。

再测试一下1451。
ping -f -l 1451 www.baidu.com
命令返回:“需要拆分数据包但是设置 DF。” 说明MTU值最大就是1450了。

于是有人就疑问,为什么在modem下测试是1478,而ping值测试 是1450?
上面ping得到的MTU值不能直接用于本地设置上,还应在此基础上加上28(数据包头大小28字节),因此最终在WAN设置页面修改MTU大小为1478。
最后,我就在路由器的WAN接口设置MTU值1478.
------------------------------------------------------------------------------------------------------
按照上面方法,我能ping通的MTU最大值是1464,再加上28(数据包头大小28字节),应该设置的值为1492,刚好是PPPoE的最佳值

解决IPV6 PMTU黑洞导致某些手机APP图片加载时间过长,小米BE6500PRO为例

之前有尝试过降低MTU大小的方法,但是改之后当时很好用,第二天又会超出大小,还要接着改。看大佬的文章最好的解决办法是打开路由器中的MSS钳制(用于在TCP连接建立时,收发双方可以通知对方通信时每一个报文段所能承载的最大数据长度。而MTU则是数据链路层的最大传输单元,限制了数据包的大小。MSS通常受限于MTU,最佳情况下MSS=MTU-40,以太网环境中最大MSS为1460字节)功能,可是小米路由器不支持这个功能,即使放在光猫拨号也不能解决问题。我的解决办法是,将IPV6设置中局域网获取IP方式改为“仅DHCPv6”

因为安卓设备只支持SLAAC(无状态地址自动指派)的方式获取IPV6地址,但是WIN10和IOS设备都支持DHCPv6的方式获取,所以通过这种方式禁止安卓设备获取IPV6地址。(这几种选项具体的差别可以参考:家用路由IPV6配置指南)因为目前我用IPV6的需求只是需要家里的电脑和NAS设备有公网IP,手机端不是一定需要IPV6地址,也算一种曲线救国的方式了吧。

浅谈大模型检测原理(附过检测提示词)

国内免费用腾讯的朱雀https://matrix.tencent.com/ai-detect/?lang=zh,可检测文章和图片

随着互联网上出现越来越多AI内容,AI检测也步步紧随。目前主流检测网站有:
1. GPTZero :综合能力最强,模型跟进速度快,有字数限制但可通过删cookie重置
2. QuillBot + Scribber (同API):无限制免费使用,检测准确度高
3. ZeroGPT:无限制,效果一般,跟进速度较慢,主要用于检测GPT系模型
4. Originality.ai:付费使用,无免费版本,效果最好

原理讲解:

AI检测方法主要参考两个指标:困惑性 + 爆发性

困惑性是指单词的不可预测性,是文章使读者感到疑惑或迷茫的潜力,代表着人类分散的思维。简单来说就是看到开头猜不到结尾,考验的是文章理解的难易程度,具体实现方式可以是把论据放在论证前

爆发性指的是句子种类和结构的不同,是文章中不同长度与类型的比例,代表着人类在写作中丰富的写作手法。具体实现方法可以是包含一定比例的长短句结合,以及使用除陈述句之外的表述方法。

image1165×607 139 KB

AI的训练的终极奥义便是从海量文本中找到连接与秩序,使得输出内容变得简单直白易于理解。但这恰恰是AI检测的把柄,AI就像是输入法的自动联想,每个模型都会有一定的联想规律,而检测AI也是需要使用到模型的,这些模型用来检测上面提到是两个指标来判断可能性,随着语言模型的升级进步,检测模型也需要跟进语料,以更好地了解模型的输出习惯。

正因如此,在某些情况下使用鲜为人知或新鲜出炉的模型是不会被检测出来的。
下图为GPTZero的更新日志,直到到一月10号它才增强对于o1的检测,像这种高端模型通常需要额外时间单独优化:

image1883×781 77.8 KB

目前可以推荐的几个模型如2.0Flash,2.0 Thinking或者o1-pro等这些都是较新的模型,虽然Deepseek V3也是新鲜出炉的,但这种开源模型易于训练和本地部署,使得检测模型相对来说更容易训练。

提示词示例分享:

Objective: To rewrite AI-generated text, imbuing it with the characteristics of a genuine human author while preserving the original information and core arguments.

Key Principles of Human Writing (and How to Mimic Them):

Word Choice and Tone:

Mix it up: Use of common, easy-to-understand words for the entire body, alongside a sprinkling of more challenging or abstract words (around 5-7 per paragraph).

Be less polite: Avoid overly formal or courteous language. Be direct and less deferential. Make sure every sentence have a meaning.

Incorporate subtle opinions and emotions: Inject personal viewpoints, feelings, and subjective interpretations into the narrative.

Think "describe," not "speak": The output should be descriptive prose, not a direct speech or conversation.

Sentence Structure:

Complexity is key: Construct sentences that are complex, and unique.

Vary sentence length: Combine short, impactful sentences with longer, more elaborate ones.

Connect your thoughts: Ensure a connection between sentences, with each sentence building upon the previous one and leading into the next. Be careful about connection words, don't overdo it.

Mix up the order: use inverted sentence structures or phrases to create a less predictable rhythm.

Logic and Flow:

Subtle jumps: Introduce minor logical leaps or tangential thoughts.

Don't be too perfect: Include minor imperfections, like slightly informal grammar or phrasing, as long as it doesn't detract from clarity. Avoid overly structured or perfectly polished prose.

Things to AVOID (Common AI Traits):

Overly straightforward ideas: Human thought processes are never linear. Introduce nuance and subtle complexities.

Excessive politeness or formality: Human writing is generally more casual and direct.

Over-reliance on perfect grammar and structure: Humans make minor errors and use less formal language.

Perfectly structured arguments: Human reasoning can be slightly less direct and more prone to digressions.

Just "rewording" the original text: Completely reimagine and re-express the ideas.

Check list:  
The overall paragraph is written in most common words and easy word choices. There are 5-7 high level vocabulary. At least mix up one sentence structure, flipped, short, long mixed... logic is mixed and jumping, the paragraph should not be a speech.

Initialization: I am ready to receive the AI-generated text. I will rewrite it embodying these human-like characteristics.

在此基础上我还会加上:

Rewrite the following content so that it sounds like human writing, avoiding explanations, straightforward ways of showing, and including leaps of thought. Use fewer commas, avoid over-describing or over-expressing, avoid excessive use of metaphors, use common and simple words, but keep the sentence structure complex, and sentences should be connected to the previous and following sentences. Add a few advanced vocabulary words to the text. Output: Don't be so polite:

重述以下内容,使其听起来像人类语言,避免解释,避免直截了当的思维方式,加入跳跃性的想法。少用逗号,不要过度描述或过度表达,避免过度使用比喻,使用常见和简单的词汇,但句子结构保持复杂,句子应与前后的句子联系起来。在文章中加入几个高级词汇词。输出不要那么礼貌:

摘自https://linux.do/t/topic/532581

朱雀大模型检测,很多人连自己写的东西都过不了,检测都被识别为AI
其实去AI很简单。只需要找一篇自己喜欢的文章、文学作品,把原文发给AI问他「这篇文章写得怎么样」,AI肯定会给出许多的回答,但这都不是重点。

此时你再把AI写的内容发给AI,让他模仿这个风格续写,一定是让他续写,而不是模仿风格,一旦提到模仿两个字AI就会刻意。
续写出来的就可以过AI检测了,起码不可能直接来一个100% AI内容

开篇和结语是AI检测的重灾区

摘自https://linux.do/t/topic/594958

生视频提示词

正向

快速高空跟踪镜头移动,无人机视角,一个超现实的高速梦境序列,一个穿兜帽衫的小男孩俯卧姿势向前飞行,轻松地在云层之间滑行,身体完全伸展,双臂向两侧伸展,双腿略微分开,头部向前,捕捉平滑水平飞行的感觉。衣服随风摇摆,相机从略高位置的俯视角度紧密跟踪从左后方向右后方移动,保持对俯卧姿势的持续视角,随着角色迅速穿越场景。环境是动态的,快速变化,下面有云层,不断往后掠过的白云,远处高悬的大月亮,四周是闪耀的星空,运动模糊和光迹增强了速度感和流畅性。快速移动。

负向

低质量,模糊,变形,手指屈扭,人物屈扭

结果:https://app.klingai.com?workId=67985051

正向

一个女生在左右扭腰跳性感的韩国女团舞,表情显得很妖娆魅惑,她挺胸扭臀,甩头摆臂,眼神直勾勾地盯着镜头,手指动作清晰有力,没有丝毫变形。

负向

低质量,变形,扭曲,错位,手部变形,不合逻辑

结果:https://app.klingai.com?workId=272793518144191

正向(有首尾帧)

万物复苏,生长的过程,画面主体动态呈现,动作自然流畅,融合,过程丝滑而匀速,符合逻辑,极致细节,镜头跟拍,超真实动态捕捉,不模糊,高质量,没有瑕疵。

结果:https://app.klingai.com?workId=144193319

正向(有首帧)

人物快速的骑行在下坡蜿蜒崎岖的小路上,一路下坡,人物的头发,裙摆随风飘起,远处的山,梯田越来越近,镜头跟随

结果:https://app.klingai.com?workId=143864742

正向(有首帧)

画面中的德牧犬扭头对橘猫不停的说着话并一副愤怒的表情。重点是橘猫用两只爪子捂住自己的两只耳朵并一副生无可恋的表情。画面中的医疗器械正在正常运行着,主体动态呈现,动作自然流畅,环境光,符合逻辑,极致细节,超真实动态捕抓,动物主体脸部不变形,清晰自然,不模糊,高质量,没有瑕疵

结果:https://app.klingai.com?workId=142790651

本地网突破VLAN

VLAN是网络交换机的一种技术,可以把不同的电脑划分在不同的网络中,使其不能互相通信,以达到提高安全性和网络性能的目的。要跨越VLAN通信,必须借助路由器或者3层交换模块。

我市的ADSL网在接入层使用了Cisco的Catalyst6509型三层交换机,在端口上设置了VLAN,把同一IP段的用户相互隔开。这样一来,安全性倒是高了,可惜平时打游戏、共享文件都不方便,需要通过其他IP段的朋友中转。于是突破VLAN成了当务之急。

我所在的段,IP地址为10.145.254.x,网关为10.145.254.1,采用24位的掩码。因为是同一IP段,所以电脑不会自动通过路由器转发数据,而妄想通过直接通信的方式联络对方电脑。在VLAN环境下,ARP是收不到回应的,因此直接通信也就被禁止了。 

要想实现互通,必须强制电脑把数据发给路由器。

大家知道,路由器判断一个数据包是否应该转发,是以其2层地址和3层地址为依据的。如果该数据包的目标MAC地址不是路由器接口的MAC地址,那么这个包根本不是给路由器的,而是HUB产生的1层广播包;如果目标MAC地址与路由器接口的MAC地址相同,但目标IP地址并不是路由器接口的IP地址,这个包就应该被路由出去;如果目标MAC地址和IP地址都与路由器接口相匹配,那这个数据包是发给路由器本身的。

电脑在发送数据时,先判断目标和自己是否在同一IP网段。如果在同一网段,则发送ARP请求,查询对方的MAC地址,然后封包发送;如果不在同一IP网段,则发送数据包,并把包头中目标MAC地址设置为本子网的路由器接口的MAC地址,而目标IP地址则是最终接收数据的电脑的IP地址的数据包。路由器收到数据以后,就会把它转发出去。

要强制电脑把本来直接发送的数据发给路由器,可以从ARP协议上下手,也可以从判断是否同一网段的过程下手。

使用ARP的方法如下:

1、使用arp -a命令查看已知的MAC列表。因为目前VLAN里只有网关和本身,所以这里只显示网关的MAC地址:

  Internet Address      Physical Address      Type

10.145.254.1          00-d0-04-14-af-fc     dynamic

2、使用arp -s命令把要与之通信的电脑的IP地址和网关的MAC地址强行捆绑。这样,这台电脑就会把发给对方的数据发给路由器。对方的机器也要运行这个命令,不过IP地址要指定为这一台。比如10.145.254.a和10.145.254.b通信,要在10.145.254.a上运行arp -s 10.145.254.b 00-d0-04-14-af-fc ,而在10.145.254.b上运行arp -s 10.145.254.a 00-d0-04-14-af-fc 

经过这样的设置,电脑还以为自己在直接发送数据,而路由器以为自己收到了需要路由的数据包。这其实是一种ARP欺骗技术。

使用同子网判断的方法如下:

双方使用route命令,建立一条“主机路由”。所谓主机路由,就是针对一台电脑而不是一个IP网段的路由项目,其目标掩码为255.255.255.255。

在10.145.254.a上运行route ADD 10.145.254.b MASK 255.255.255.255  10.145.254.1 ,在10.145.254.b上运行route ADD 10.145.254.a MASK 255.255.255.255  10.145.254.1即可。根据路由的最长匹配原则,电脑在发送数据时会选择掩码里1比较多的那一项,也就是主机路由(32位掩码),而不会认为对方和自己同一子网(24位掩码)。

使用以上两种方法,就可以突破VLAN的限制了。除了CS的LAN Gane还不能正常运行(Internet Game正常)以外,其他软件均运行正常。

现在是一个高人的介绍哈:

第一:如果该数据包的目标MAC地址不是路由器接口的MAC地址,那么这个包根本不是给路由器的,而是HUB产生的1层广播包;

点评:这句话表达有失偏颇!问题的关键在于“HUB产生的1层广播报文”这是一句让人昏倒在地的说法哦!

分析:

1、路由器可以分解为一个独立的物理层+数据链路层+网络层构成转发决策机构!当然路由器还有自己的七层(严格的说是TCP/IP的第四层应用层)。现在我们仅仅需要关心的就是路由器的二层+三层这两个层面;

2、如果路由器一个interface接受到的报文的DMAC不等于interface的MAC,那么路由器认为这个报文不是自己的,或者这个报文不需要自己进行处理,所以路由器将直接discard这个报文!

所以“HUB产生的1层广播报文”犯下了严重的阶级路线错误!

第二:如果目标MAC地址与路由器接口的MAC地址相同,但目标IP地址并不是路由器接口的IP地址,这个包就应该被路由出去;

点评:这句话表达基本上没有什么错误!

分析:

1、路由器接口接收到报文如果DMAC=路由器接口自身的MAC,那么路由器将尽义务进行下一步的处理,那就是到底将这个报文进行路由转发还是给我CPU自己使用;

2、但是究竟是进行转发还是提交给CPU,这已经不是二层是事情了,各司其职嘛。二层协议栈还要将这个报文的二层帧头、FCS这个尾巴去掉提交给三层!

3、三层收到IP包之后,那么判断这个IP包的DIP等不等于接口IP地址,如果不等于,那么表示的是这个报文不需要提交CPU高层协议栈。需要进行路由转发处理!

一旦路由器作出路由转发处理,那么路由器接下来的工作是不是就是查询路由表,看看把这个瘟神从那个接口送走了之!

第三:如果目标MAC地址和IP地址都与路由器接口相匹配,那这个数据包是发给路由器本身的。

点评:这句话表达没有什么错误!

分析:

1、这个观点还是延续的上一个说法,那就是路由器二层协议栈将报文的帧头、FCS尾巴去掉之后,提交给协议栈的三层---网络层;

2、三层收到IP包之后,那么判断这个IP包的DIP等不等于接口IP地址,如果不等于,那么表示的是这个报文不需要提交CPU高层协议栈。需要进行路由转发处理!

3、那么如果DIP=接口IP,三层就认为这个报文需要提交给CPU来处理!

一旦路由器作出判定,这个报文需要提交给CPU,那么三层协议栈就需要将报文的IP包头删除,将剩余的部分(就是IP包的内容部分哈)提交给四层或者直接提交给ICMP等协议高层处理

下面是高人的一个交换原理的模型图片,出处[url]www.cditlab.com[/url]

摘自
https://blog.51cto.com/xiong/17780

区块链-可编程支付原理

摘自https://liaoxuefeng.com/books/blockchain/bitcoin/pay/index.html

区块链创建交易的方法是:小明声称他给了小红一万块钱,只要能验证这个声明确实是小明作出的,并且小明真的有1万块钱,那么这笔交易就被认为是有效的

如何验证这个声明确实是小明作出的呢?数字签名就可以验证这个声明是否是小明做的,并且,一旦验证通过,小明是无法抵赖的。

在比特币交易中,付款方就是通过数字签名来证明自己拥有某一笔比特币,并且,要把这笔比特币转移给指定的收款方

比特币的公钥是根据私钥计算出来的

比特币的地址并不是公钥,而是公钥的哈希,即从公钥能推导出地址,但从地址不能反推公钥,因为哈希函数是单向函数

签名算法是使用私钥签名,公钥验证的方法,对一个消息的真伪进行确认。如果一个人持有私钥,他就可以使用私钥对任意的消息进行签名,即通过私钥sk对消息message进行签名,得到signature

signature = sign(message, sk);

签名的目的是为了证明,该消息确实是由持有私钥sk的人发出的,任何其他人都可以对签名进行验证。验证方法是,由私钥持有人公开对应的公钥pk,其他人用公钥pk对消息message和签名signature进行验证:

isValid = verify(message, signature, pk);

如果验证通过,则可以证明该消息确实是由持有私钥sk的人发出的,并且未经过篡改。

对消息进行签名,实际上是对消息的哈希进行签名,这样可以使任意长度的消息在签名前先转换为固定长度的哈希数据。对哈希进行签名相当于保证了原始消息的不可伪造性。

下面来说可编程支付的原理

比特币的所有交易的信息都被记录在比特币的区块链中,任何用户都可以通过公钥查询到某个交易的输入和输出金额。当某个用户希望花费一个输出时,例如,小明想要把某个公钥地址的输出支付给小红,他就需要使用自己的私钥对这笔交易进行签名,而矿工验证这笔交易的签名是有效的之后,就会把这笔交易打包到区块中,从而使得这笔交易被确认。

但比特币的支付实际上并不是直接支付到对方的地址,而是一个脚本,这个脚本的意思是:谁能够提供另外一个脚本,让这两个脚本能顺利执行通过,谁就能花掉这笔钱:

FROM: UTXO Hash#index
AMOUNT: 0.5 btc
TO: OP_DUP OP_HASH160 <address> OP_EQUALVERIFY OP_CHECKSIG

所以,比特币交易的输出是一个锁定脚本(一般是资产转入方地址),而下一个交易的输入是一个解锁脚本(里面包括资产转入方的公钥和签名)。必须提供一个解锁脚本,让锁定脚本正确运行,那么该输入有效,就可以花费该输出。

我们以真实的比特币交易为例,某个交易的某个输出脚本是76a914dc...489c88ac这样的二进制数据,注意这里的二进制数据是用十六进制表示的,而花费该输出的某个交易的输入脚本是48304502...14cf740f这样的二进制数据,也是十六进制表示的:

   ┌─────────────────────────────────────────────────────────────────────┐
   │tx:ada3f1f426ad46226fdce0ec8f795dcbd05780fd17f76f5dcf67cfbfd35d54de  │
   ├──────────────────────────────────┬──────────────────────────────────┤
   │                                  │1M6Bzo23yqad8YwzTeRapGXQ76Pb9RRJYJ│──┐
   │                                  ├──────────────────────────────────┤  │
   │                                  │18gJ3jeLdMnr9g3EcbRzXwNssYEN5yFHKE│  │
   │3JXRVxhrk2o9f4w3cQchBLwUeegJBj6BEp├──────────────────────────────────┤  │
   │                                  │1A5Mp8jHcMJEqZUmcsbmtqXfsiGdWYmp6y│  │
   │                                  ├──────────────────────────────────┤  │
   │                                  │3JXRVxhrk2o9f4w3cQchBLwUeegJBj6BEp│  │
   └──────────────────────────────────┴──────────────────────────────────┘  │
┌───────────────────────────────────────────────────────────────────────────┘
│   script: 76a914dc5dc65c7e6cc3c404c6dd79d83b22b2fe9f489c88ac
│
│  ┌─────────────────────────────────────────────────────────────────────┐
│  │tx:55142366a67beda9d3ba9bfbd6166e8e95c4931a2b44e5b44b5685597e4c8774  │
│  ├──────────────────────────────────┬──────────────────────────────────┤
└─>│1M6Bzo23yqad8YwzTeRapGXQ76Pb9RRJYJ│13Kb2ykVGpNTJbxwnrfoyZAwgd4ZpXHv2q│
   └──────────────────────────────────┴──────────────────────────────────┘
    script: 4830450221008ecb5ab06e62a67e320880db70ee8a7020503a055d7c45b7
            3dcc41adf01ea9f602203a0d8f4314342636a6a473fc0b4dd4e49b62be28
            8f0a4d5a23a8f488a768fa9b012103dd8763f8c3db6b77bee743ddafd33c
            969a99cde9278deb441b09ad7c14cf740f

我们先来看锁定脚本,锁定脚本的第一个字节76翻译成比特币脚本的字节码就是OP_DUPa9翻译成比特币脚本的字节码就是OP_HASH16014表示这是一个20字节的数据,注意十六进制的14换算成十进制是20,于是我们得到20字节的数据。最后两个字节,88表示字节码OP_EQUALVERIFYac表示字节码OP_CHECKSIG,所以整个锁定脚本是:

        OP_DUP 76
    OP_HASH160 a9
          DATA 14 (dc5dc65c...fe9f489c)
OP_EQUALVERIFY 88
   OP_CHECKSIG ac

我们再来看解锁脚本。解锁脚本的第一个字节48表示一个72字节长度的数据,因为十六进制的48换算成十进制是72。接下来的字节21表示一个33字节长度的数据。因此,该解锁脚本实际上只有两个数据。

DATA 48 (30450221...68fa9b01)
DATA 21 (03dd8763...14cf740f)

接下来,我们就需要验证这个交易是否有效。要验证这个交易,首先,我们要把解锁脚本和锁定脚本拼到一块,然后,开始执行这个脚本:

          DATA 48 (30450221...68fa9b01)
          DATA 21 (03dd8763...14cf740f)
        OP_DUP 76
    OP_HASH160 a9
          DATA 14 (dc5dc65c...fe9f489c)
OP_EQUALVERIFY 88
   OP_CHECKSIG ac

比特币脚本是一种基于栈结构的编程语言,所以,我们要先准备一个空栈,用来执行比特币脚本。然后,我们执行第一行代码,由于第一行代码是数据,所以直接把数据压栈:

│                   │
│                   │
│                   │
│                   │
│                   │
│                   │
├───────────────────┤
│30450221...68fa9b01│
└───────────────────┘

紧接着执行第二行代码,第二行代码也是数据,所以直接把数据压栈:

│                   │
│                   │
│                   │
│                   │
├───────────────────┤
│03dd8763...14cf740f│
├───────────────────┤
│30450221...68fa9b01│
└───────────────────┘

接下来执行OP_DUP指令,这条指令会把栈顶的元素复制一份,因此,我们现在的栈里面一共有3份数据:

│                   │
│                   │
├───────────────────┤
│03dd8763...14cf740f│
├───────────────────┤
│03dd8763...14cf740f│
├───────────────────┤
│30450221...68fa9b01│
└───────────────────┘

然后,执行OP_HASH160指令,这条指令会计算栈顶数据的hash160,也就是先计算SHA-256,再计算RipeMD160。对十六进制数据03dd8763f8c3db6b77bee743ddafd33c969a99cde9278deb441b09ad7c14cf740f计算hash160后得到结果dc5dc65c7e6cc3c404c6dd79d83b22b2fe9f489c,然后用结果替换栈顶数据:

│                   │
│                   │
├───────────────────┤
│dc5dc65c...fe9f489c│
├───────────────────┤
│03dd8763...14cf740f│
├───────────────────┤
│30450221...68fa9b01│
└───────────────────┘

接下来的指令是一条数据,所以直接压栈:

├───────────────────┤
│dc5dc65c...fe9f489c│
├───────────────────┤
│dc5dc65c...fe9f489c│
├───────────────────┤
│03dd8763...14cf740f│
├───────────────────┤
│30450221...68fa9b01│
└───────────────────┘

然后,执行OP_EQUALVERIFY指令,它比较栈顶两份数据是否相同,如果相同,则验证通过,脚本将继续执行,如果不同,则验证失败,整个脚本就执行失败了。在这个脚本中,栈顶的两个元素是相同的,所以验证通过,脚本将继续执行:

│                   │
│                   │
│                   │
│                   │
├───────────────────┤
│03dd8763...14cf740f│
├───────────────────┤
│30450221...68fa9b01│
└───────────────────┘

最后,执行OP_CHECKSIG指令,它使用栈顶的两份数据,第一份数据被看作公钥,第二份数据被看作签名,这条指令就是用公钥来验证签名是否有效。根据验证结果,成功存入1,失败存入0

│                   │
│                   │
│                   │
│                   │
│                   │
│                   │
├───────────────────┤
│1                  │
└───────────────────┘

最后,当整个脚本执行结束后,检查栈顶元素是否为0,如果不为0,那么整个脚本就执行成功,这笔交易就被验证为有效的。

上述代码执行过程非常简单,因为比特币的脚本不含条件判断、循环等复杂结构。上述脚本就是对输入的两个数据视作签名和公钥,然后先验证公钥哈希是否与地址相同,再根据公钥验证签名,这种标准脚本称之为P2PKH(Pay to Public Key Hash)脚本。

输出

当小明给小红支付一笔比特币时,实际上小明创建了一个锁定脚本,该锁定脚本中引入了小红的地址。要想通过解锁脚本花费该输出,只有持有对应私钥的小红才能创建正确的解锁脚本(因为解锁脚本包含的签名只有小红的私钥才能创建),因此,小红事实上拥有了花费该输出的权利。

使用钱包软件创建的交易都是标准的支付脚本,但是,比特币的交易本质是成功执行解锁脚本和锁定脚本,所以,可以编写各种符合条件的脚本。比如,有人创建了一个交易,它的锁定脚本像这样:

OP_HASH256
      DATA 6fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000
  OP_EQUAL

这有点像一个数学谜题。它的意思是说,谁能够提供一个数据,它的hash256等于6fe28c0a...,谁就可以花费这笔输出。所以,解锁脚本实际上只需要提供一个正确的数据,就可以花费这笔输出。点这里查看谁花费了该输出。

比特币的脚本通过不同的指令还可以实现更灵活的功能。例如,多重签名可以让一笔交易只有在多数人同意的情况下才能够进行。最常见的多重签名脚本可以提供3个签名,只要任意两个签名被验证成功,这笔交易就可以成功。

FROM: UTXO Hash#index
AMOUNT: 10.5 btc
TO: P2SH: OP_2 pk1 pk2 pk3 OP_3 OP_CHECKMULTISIG

也就是说,3个人中,只要任意两个人同意用他们的私钥提供签名,就可以完成交易。这种方式也可以一定程度上防止丢失私钥的风险。3个人中如果只有一个人丢失了私钥,仍然可以保证这笔输出是可以被花费的。

支付的本质

从比特币支付的脚本可以看出,比特币支付的本质是由程序触发的数字资产转移。这种支付方式无需信任中介的参与,可以在零信任的基础上完成数字资产的交易,这也是为什么数字货币又被称为可编程的货币。

由此催生出了智能合约:当一个预先编好的条件被触发时,智能合约可以自动执行相应的程序,自动完成数字资产的转移。保险、贷款等金融活动在将来都可以以智能合约的形式执行。智能合约以程序来替代传统的纸质文件条款,并由计算机强制执行,将具有更低的信任成本和运营成本。

小结

比特币采用脚本的方式进行可编程支付:通过执行解锁脚本确认某个UTXO的资产可以被私钥持有人转移给其他人。

Android开发环境搭建

JDK下载

下载链接:https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html

或者直接华军下载,一般为Sun Java SE Development Kit (JDK)  文件然后安装
安装后环境变量的path中加入刚安装的地址,带bin

再在系统环境变量加一个JAVA_HOME,地址就是刚安装地址,不带bin

java -version提示安装结果,

AndroidStudio下载

https://www.androiddevtools.cn/android-studio.html

下载安装

安装SDK

国内网络有时tool是下载不下来的,这时就要设置代理

安装插件的时候发现,如果没有代理就无法安装插件,于是开始设置代理

在自动检测那一栏填 http://mirrors.tuna.tsinghua.edu.cn:80 参考

连接手机

https://blog.csdn.net/Winkyyyyyy/article/details/142604413

ReLU激活函数

激活函数在深度学习中起着至关重要的作用,它们将神经元的输入映射到输出,引入非线性因素,使得神经网络能够学习和表示复杂的模式。以下是几种常见的激活函数及其特点

ReLU(Rectified Linear Unit,修正线性单元)是一种在深度学习中广泛使用的激活函数。其数学定义为:

ReLU(x)=max⁡(0,x)ReLU(x)=max(0,x)

这意味着当输入 xx 大于零时,ReLU 函数的输出等于输入值本身;当输入 xx 小于或等于零时,输出为零

ReLU 的优点:

  1. 避免梯度消失问题:由于在正数区域的导数为1,ReLU 函数能够有效缓解梯度消失问题,从而帮助神经网络更快地收敛。
  2. 计算效率高:ReLU 的计算非常简单,只需要一个最大值操作,因此在深层网络中具有较高的计算效率
  3. 简单易实现:ReLU 函数的实现非常简单,通常只需要比较输入值和零的大小,然后取较大值。

ReLU 的缺点:

  1. 神经元死亡问题:当输入为负数时,ReLU 的输出为零,这可能导致部分神经元在训练过程中“死亡”,即这些神经元的输出永远为零,无法再对任何数据做出响应。
  2. 非零均值问题:由于负数部分被置为零,ReLU 的输出通常不具有零均值,这可能影响后续层的训练效果

ReLU 的变种:

为了克服 ReLU 的缺点,研究者提出了多种变种激活函数,如:

  • Leaky ReLU:在负数区域引入一个小的线性分量,以避免神经元死亡问题。
  • Parametric ReLU (PReLU) :在负数区域的斜率可以作为参数进行调整,进一步优化网络性能。
  • ELU (Exponential Linear Unit) :在负数区域引入指数函数,使得输出更接近零均值,并加速学习。

应用场景:

ReLU 及其变种在卷积神经网络(CNN)和深层神经网络中被广泛使用,尤其是在图像识别、自然语言处理等领域表现优异

ReLU 是一种高效且常用的激活函数,尽管存在一些缺点,但其优点使其成为深度学习中的首选激活函数之一