diff --git a/Go/Go基础/1 概述.md b/Go/Go基础/1 概述.md new file mode 100644 index 00000000..b0b38d87 --- /dev/null +++ b/Go/Go基础/1 概述.md @@ -0,0 +1,57 @@ +# 概述 +## 1 背景 + +### 产生原因 +Go是Google开发的一种静态、强类型、编译型、并发型,并具有垃圾回收功能的类C编程语言。2009以开源项目的形式发布,2012年发布1.0稳定版本,距今已经十年了。 + +Go语言之父Pike提到:Go语言是以C为原型,以C++为目标而设计的。因为他觉得C++忒复杂了,要解救程序员于水火。 + +核心设计师Pike和Ken都是出身自贝尔实验室,Ken之于Pike,亦师亦友,共同发明了UTF-8,还共同结对编程过,感情好的像穿一条裤子。 + +Pike是Unix先驱,贝尔实验室最早跟Ken、Dennis一起开发Unix的猛人,Plan9 OS的灵魂人物。大胡子Ken爷爷则是Unix之父,和Dennis一起发明了C语言,殿堂骨灰级程序员,早已是名满天下。 + +### 设计哲学 + +C++语法自由自在,于是乎一群大佬为tab or space、大括号要不要换行等诸如此类的格式问题吵得不可开交。Go设计师认为,都是吃饱了撑的。 + +Go编译器内建工具gofmt强制源码格式化。对不起,没有选项,我的地盘听我的,把精力focus到真正重要的事情上来,停止无意义的争吵。 + +Go在某些点确实有突破,比如让并发编程更容易、运行更高效,比如垃圾回收让程序更安全,比如基于消息(Channel)编程的支持,比如内嵌关联结构,这些都很赞,因为编程语言发展这么多年,任何突破都是艰难和宝贵的。 +### Go特色 + +Go是介于C与C++之间的语言,比C抽象层次高,比C++抽象层次低。因为是一门新的编程语言,站在巨人的肩膀,博采众长,规避了一些已知的问题,开发了一些优秀的特征,相比C/C++,Go的核心特征包括以下几个方面: + +* 原生并发,以东尼·霍尔的通信顺序进程(CSP)为基础的goroutine,适合现代多核机器 +* 垃圾回收,非常高效(请来世界顶级内存管理专家设计) +* 强大的标准库,对网络编程等的良好支持 +* CGO提供了GO调用C机制,扩展了GO的能力边界 +* 内嵌关联数组 +* 非侵入式的接口设计 +* 简单清晰的语法 + + +### 优点 + +* 自带gc。 +* 静态编译,编译好后,扔服务器直接运行。 +* 简单的思想,没有继承,多态,类等。 +* 丰富的库和详细的开发文档。 +* 语法层支持并发,和拥有同步并发的channel类型,使并发开发变得非常方便。 +* 简洁的语法,提高开发效率,同时提高代码的阅读性和可维护性。 +* 超级简单的交叉编译,仅需更改环境变量。(花了我两天时间编译一个imagemagick到arm平台) +* 内含完善、全面的软件工程工具。Go语言自带的命令和工具相当地强大。通过它们,我们可以很轻松地完成 +* Go语言程序的获取、编译、测试、安装、运行、运行分析等一系列工作,这几乎涉及了开发和维护一个软件的所有环节。 + + +### Go VS C/C++ + +![](image/2021-05-20-07-25-25.png) + +Go号称兼备C++的运行效率和PHP的开发效率,但benchmarks好像并不支持这个结论,数据有点打脸,Go的运行效率接近却略低于Java。 + +![](image/2021-05-20-07-40-21.png) + + + +## 2 从C的角度理解Go + diff --git a/Go/Go基础/image/2021-05-20-07-25-25.png b/Go/Go基础/image/2021-05-20-07-25-25.png new file mode 100644 index 00000000..8b08342c Binary files /dev/null and b/Go/Go基础/image/2021-05-20-07-25-25.png differ diff --git a/Go/Go基础/image/2021-05-20-07-40-21.png b/Go/Go基础/image/2021-05-20-07-40-21.png new file mode 100644 index 00000000..3a778062 Binary files /dev/null and b/Go/Go基础/image/2021-05-20-07-40-21.png differ diff --git a/Go/test/1.go b/Go/test/1.go new file mode 100644 index 00000000..05483a70 --- /dev/null +++ b/Go/test/1.go @@ -0,0 +1,14 @@ +package main + +import ( + "fmt" + "net/http" +) + +func main() { + http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + fmt.Fprintf(w, "Hello, you've requested: %s\n", r.URL.Path) + }) + + http.ListenAndServe(":80", nil) +} \ No newline at end of file diff --git a/Go/test/go.mod b/Go/test/go.mod new file mode 100644 index 00000000..d4e0fac0 --- /dev/null +++ b/Go/test/go.mod @@ -0,0 +1,8 @@ +module example.com/m + +go 1.16 + +require ( + github.com/ramya-rao-a/go-outline v0.0.0-20200117021646-2a048b4510eb // indirect + golang.org/x/tools v0.1.1 // indirect +) diff --git a/Go/test/go.sum b/Go/test/go.sum new file mode 100644 index 00000000..9041f5bd --- /dev/null +++ b/Go/test/go.sum @@ -0,0 +1,26 @@ +github.com/ramya-rao-a/go-outline v0.0.0-20200117021646-2a048b4510eb h1:ilZSL4VaIq4Hsi+lH928xQKnSWymFug6r2gJomUBpW8= +github.com/ramya-rao-a/go-outline v0.0.0-20200117021646-2a048b4510eb/go.mod h1:1WL5IqM+CnRCAbXetRnL1YVoS9KtU2zMhOi/5oAVPo4= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.1 h1:wGiQel/hW0NnEkJUk8lbzkX2gFJU6PFxf1v5OlCfuOs= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/工作日志/2020年12月5日-毕设.md b/工作日志/2020年12月5日-毕设.md deleted file mode 100644 index 34b7d9e2..00000000 --- a/工作日志/2020年12月5日-毕设.md +++ /dev/null @@ -1,26 +0,0 @@ -# 基于联邦学习的恶意软件表征系统研究 - -## 第一章:绪论 - -### 背景 - -### 国内外研究现状 - -### 研究内容 - -### 论文结构 - -## 第二章:相关技术研究 - -## 第三章:基于DNN的特征生成模型 - - -## 第四章:模型的解释方法与评估 - - -## 第五章:联邦学习系统的构建 - -## 第六章:模型的效果评估 - - -结论 \ No newline at end of file diff --git a/工作日志/2021年5月1日-五月份计划.md b/工作日志/2021年5月1日-五月份计划.md index 3ffdb8c2..f869c1b5 100644 --- a/工作日志/2021年5月1日-五月份计划.md +++ b/工作日志/2021年5月1日-五月份计划.md @@ -1,4 +1,13 @@ -## 研究任务 +## 任务 + +> 通过撰写论文驱动自己执行接下来的任务。研究任务->工程任务 + +- [ ] 1 数据预处理(研究任务),需要了解Android恶意软件的基础知识,并提取特征。 +- [ ] 2 阅读论文(研究任务),完成小论文和毕设论文的框架,以及大部分内容,实验和实验结果空着,等以后完成。 +- [ ] 3 继续实验(研究任务),找到一种衡量非独立同分布的方法(分布不平衡的程度。完成毕设论文中设计的半监督实验,非独立同分布的实验,并横向纵向对比实验结果。 +- [ ] 4 构建展示系统(工程任务)。做成一个可以用来展示的网站。可视化操作和训练过程。 + +## 研究任务(完成毕设论文) > 四月份计划主要进行基础知识的学习和复习。完成了初步的数据处理。接下来的主要任务是阅读论文并完成论文复习计划。 > 开始执行五月份计划,与四月份计划进行衔接。完成工程上与学术上的推进工作。 @@ -6,74 +15,64 @@ > 抓紧吧基础的工程弄完,然后开始搞论文,然后在搞回工程。实现最终的系统。 > 我们是合作关系,而不是上下级关系。别懈怠了。 -### **阅读论文**(两周) -> (100篇计划)蒋师兄前前后后分享了估计也有一百篇了,现在重新开始读论文,在复现文章的同时进行广泛的阅读。利用citavi这个工具。 +### 阅读论文(两周) +> (100篇计划)蒋师兄前前后后分享了估计也有一百篇了,现在重新开始读论文,在复现文章的同时进行广泛的阅读。利用citavi这个工具。 - [ ] 待定 -### **联邦学习文章复现**(四周) +### 联邦学习论文复现(四周) > 阅读当前最新的联邦学习文章。使用别人的代码复现联邦学习的过程。复习和复现 - - -### **恶意软件文章复现**(四周) +### 恶意软件文章复现(四周) - [ ] DeepAMD - [ ] CIC - -### **联邦学习+恶意软件文章复现**(四周) -> 后续任务:论文撰写计划(六月份计划) - - -- [ ] 待定 - - ## 工程任务(完成目标系统) + > 需要确定最终实现到什么程度。如果还是单机多线程仿真的,大可不必进行大量修改。在本地通过socket多线程通信进行仿真即可。没有必要考虑网页端的训练(用户将模型下载到Chrome浏览器中,在Chrome浏览器中进行梯度下降?大可不必。第一步应该是首先实现本地浏览器调用本地后端的程序进行仿真。然后尝试远程浏览器,建立socket通信,进行真实系统仿真。而且远程系统,必须也有相关的Python环境才行,或者直接在浏览器中使用JavaScript进行梯度下降。) > 对于单机仿真环境:前端调用后端的训练线程,实现联邦学习。 > 对于多机真实环境:前端直接下载模型,在浏览器中进行梯度下降,实现联邦学习过程。 +### 初级阶段(五月份) - -### **初级阶段**(五月份) > 主要实现本地线程级别的仿真。用来完成研究中的实验和计划 > 该仿真实验主要是了验证论文,发论文。 - -- [ ] pysyft线程级别仿真 +- [X] pysyft线程级别仿真 - [ ] pysyft论文仿真实验 + - [ ] 针对联邦学习的仿真 - [ ] 针对恶意软件的仿真 - - - [ ] 尝试掌握最新的联邦学习框架(既然选择了pysyft,就不要考虑tensorflow了。pysyft的生态可能更好,而且做起来简单。主要是tensorflow框架过于庞大,很多东西虽然规范很好用起来方便,但是训练过程着实过于麻烦。使用Keras还好。如果想要修改底层必然会耗费大量精力。tensorflow能够使用js在网页中完成训练,pytorch也能够使用js在网页中完成训练。pytorch也能在android端完成训练。) - [ ] 对pysyft框架进行优化和扩展。 -### **中级阶段**(六月份) +### 中级阶段(六月份) + > 主要对pysyft框架中的内容进行理解和修改。 > 构建pysyft对联邦学习的远程仿真实现。实现多端协同仿真,实现可视化界面。 - [ ] 使用docker容器和socket编程,实现多端协同训练。(从仿真向现实场景过渡。) - [ ] 使用docker容器,优化部署过程,实现windows/linux/android场景下的跨平台实验。(向现实场景过度。) -### **最终阶段**(七八月份) -> 构建系统。主要是为了最终的毕业服务。 +### 最终阶段(八月份) +> 构建系统。主要是为了最终的毕业服务。 - [ ] 使用web服务器,实现可视化。包括可视化训练过程的控制、可视化展示训练过程和训练结果。(大概花一个月时间,本质上为了毕业,能够形成一个看起来很漂亮的系统) - 前端: + - [ ] 训练控制模块(训练过程的配置。选择训练客户端、选择控制客户端,设置训练的参数。加号按钮,在本地网页上进行选择。) - [ ] 训练过程模块(训练过程中的日志和状态变化图。) - [ ] 模型展示模块(用来展示训练结果,可视化训练模型) - [ ] 恶意软件检测模块。(参考手写体ONNX.js的网页,简单好用) - - 后端: + - [ ] 通信模块(参与者,与参与者之间通信的实现。可以通过报名和注册的方式参与其中。) - [ ] 训练模块(联邦学习引擎,主要通过联邦学习的方法,训练一个恶意软件模型) - [ ] 应用模块(恶意软件检测引擎,包括大量的恶意软件处理模块) @@ -82,13 +81,23 @@ > 需要实现跨平台socket通信。如果弄完这个,发一篇论文不怕比不了也。 考虑使用一下技术展示成果: + - html css javascrip -- bootstrap vue.js chart.js -- python django mysql +- bootstrap vue.js chart.js +- python django - pytorch pysyft websocket ## 计划 +### 每日计划 + +* 上午:三篇论文 +* 下午:三篇论文 +* 晚上:四篇论文 + +如何看论文: + +### 每周计划 * 第九周(4.26-5.2)完成论文阅读计划。 * 第十周(5.3-5.9)完成论文复现计划1——联邦学习论文复现 @@ -98,6 +107,11 @@ > 这样一看似乎真的没有时间。自己不过也只剩一个月的时间做完毕设了。 +### 每月计划 + +* 五月份计划 +* 六月份计划 +* 七月份计划 +* 八月份计划 ## 收获 - diff --git a/工作日志/2021年5月8日-今日计划.md b/工作日志/2021年5月8日-今日计划.md index 58ad33c3..b8cab6c4 100644 --- a/工作日志/2021年5月8日-今日计划.md +++ b/工作日志/2021年5月8日-今日计划.md @@ -1,8 +1,9 @@ ## 计划 -- [x] 五月份计划——ida 实现 -- [x] 五月份计划——prox实现 +- [X] 五月份计划——ida 实现 +- [X] 五月份计划——prox实现 ## 收获 -* 学习了websocket的使用,了解了Python异步通信编程。可以考虑使用Django快速构建本地的一个网站,用来展示和控制联邦学习过程。 \ No newline at end of file +* 学习了websocket的使用,了解了Python异步通信编程。可以考虑使用Django快速构建本地的一个网站,用来展示和控制联邦学习过程。 +* 参数服务器与客户端通信只能使用权重来更新服务器上的模型。因为,如果使用梯度的话,必须每个epoch或者每一个batchsize都要上传grad。但是在训练过程中,可以经过多个epoch或者batchsize后,上传权重,进行合并。 diff --git a/工作日志/总结.md b/工作日志/每周总结.md similarity index 100% rename from 工作日志/总结.md rename to 工作日志/每周总结.md diff --git a/工作日志/毕业设计.md b/工作日志/毕业设计.md new file mode 100644 index 00000000..3f515efa --- /dev/null +++ b/工作日志/毕业设计.md @@ -0,0 +1,75 @@ +# 基于联邦学习的恶意软件检测系统研究 + +## 第一章:绪论 + +### 研究背景和意义 + +1. 恶意软件检测 +2. 数据的需求:数据隐私保护的需求、数据无标签问题的解决、数据非独立同分布训练模型、数据动态变化问题的解决 +3. 针对以上背景,研究基于机器学习的恶意软件检测模型构建方案有十分重要的意义 + +> 说实话,我主要是解决联邦学习中的问题,而非解决恶意软件检测的问题。为了解决数据中存在的问题,而非恶意软件相关的问题。如何让解决的问题与恶意软件检测进行强相关?而非与联邦学习强相关。 +> +> 训练数据+训练算法->训练模型->恶意软件检测。 +> +> 通过概述训练算法,解决训练数据中的需求和存在的问题,从而改善训练模型的准确率。而非直接更改模型,增强恶意软件检测的结果。需要把这个东西说明。 + +### 研究现状 + +1. 恶意软件检测的机器学习方案 +2. 恶意软件检测的联邦学习方案 +3. 恶意软件检测与半监督学习的方案 +4. 联邦学习的隐私保护、半监督学习、非独立同分布等开放问题的解决方案。 + +### 研究内容 + +1. 联邦隐私保护学习方案 +2. 联邦半监督学习方案 +3. 联邦非独立同分布学习方案 + +### 论文结构 + +## 第二章:理论基础 + +### 1 恶意软件检测原理 + +> 恶意软件主要分类、恶意软件主要分类的依据和数学表示(接口、行为?)、恶意软件主要的检测方法利用到的原理。 + +### 2 特征提取技术 + +> 特征提取技术,特征降维方法。动静态特征的提取方法。 + +### 3 联邦学习 + +> 联邦学习的基础原理。联邦学习的实现方案。联邦学习的分类和数学表示。联邦学习中的开放问题。 + +### 4 隐私保护方法 + +> 差分隐私、同态加密方法。实现了多方安全计算。 + +### 5 半监督学习原理 + +> 半监督学习解决的问题。半监督学习的目标问题。 + +### 6 非独立同分布的原理 + +> 非独立同分布的原理、表示方法(衡量标准)、产生的影响(论证非独立同分布是联邦学习解决问题中的关键问题。) + +## 第三章:基于联邦学习的恶意软件检测算法 + +## 第四章:基于联邦半监督学习的恶意软件检测算法 + +## 第五章:针对非独立同分布问题的恶意软件检测算法 + +## 第六章:恶意软件检测算法的实验与结果 + + +## 第七章:恶意软件检测系统构建 + +1. 训练控制模块 +2. 网络通信模块 +3. 训练展示模块 +4. 实验结果对比模块 + + +## 结论 diff --git a/工作日志/研究方向.md b/工作日志/研究方向.md new file mode 100644 index 00000000..560d58fe --- /dev/null +++ b/工作日志/研究方向.md @@ -0,0 +1,7 @@ +> 文章的研究方向,应该主要包括以下三个点。 + +## 数据的隐私性问题——联邦学习与隐私保护框架 + +## 数据的非独立同分布问题——非独立同分布&联邦学习算法 + +## 数据的标签缺失问题——半监督学习&联邦学习算法