微软亚洲研究院的“三好”实习生

在博客留言中,有读者反映想了解如何才能成为微软亚洲研究院实习生。为此,我们邀请了研究院创新工程中心的开发经理邹欣谈谈他在招收实习生过程中的体会。邹欣于1991年获得北京大学计算机软件学士学位,随后去美国韦恩州立大学留学并获得计算机硕士学位。毕业后加入微软公司参与了Outlook, Visual Studio Team System等重要产品的开发工作。他历时两年半精心筹备和撰写的《移山之道--VSTS软件开发指南》也即将出版。下面让我们一起来看看邹欣对“三好”实习生的理解。

 

文:邹欣  

 

    每年有许多大学生申请到微软亚洲研究院实习或工作,很多同学问:研究院选择实习生和员工的标准是什么?我要如何准备,才能进入研究院,才能做出很好的成绩?沈向洋院长把好实习生和员工的标准归纳为“三好”:即数学好,编程好,态度好。下面我谈谈我粗浅的理解,和大家探讨:

 

(邹欣与实习生们一起讨论问题)

 

一.数学好

 

   数学是一切自然科学的基础,计算机科学和数学的各门分支都有紧密的联系。没有一个坚实的数学基础,是很难做出很好的研究。我想很多同学一看到这个要求,就会摇头,说:“完了,我大学里数学考得不好。”我觉得这里讲的“好”,并不完全决定于考试的分数,或者说碰巧学了某一门数学课,能背得出某一个公式。我们更看重的是能否运用数学这一工具,去分析问题,解决问题。另一个重要的能力是学习,特别是自学的能力,当你发现在研究中需要一些你并不熟悉的数学知识,怎么办?要靠自己学习,这里没有任课老师给你布置作业,规定哪些部分是在考试范围内,哪些是在考试范围外。你要自己学习,问问题(这里有很多数学‘牛人’会帮助你),然后把学到的知识运用到研究实践中去。

 

二.编程好

 

   由于我在大学的时候学的是软件专业,后来在工作中写了比较多的程序。因此我对这一点有比较多的体会。一提到编程,很多同学也有很多问题,比如:

   “我学的是Java,这个是不是比C# 好?”,

     “我学了VB ,asp.net, 正在学C,到底要学多少才够?”,

     “我的计算机专业课分数不高,但是我很喜欢写程序,能来实习么?”

 

   我觉得和上面的“数学好”类似,问题不在于你碰巧学了什么语言,或者考试的分数如何,关键在于你对于计算机的理解。程序设计语言,是用来控制计算机的动作。那一个语言的语句是如何最终控制了计算机的动作的呢?这就要牵涉到如何把语句变化成计算机能“懂”的命令——这是《编译原理》课上讲到的,计算机如何执行这些动作——这是《操作系统》的内容,程序到底能做什么,不能做什么,这是《形式语言与自动机》中要讲到的,我们怎样能高效地用程序来解决问题,这时《数据结构》、《算法》就很重要。真正掌握了这些知识,同学们就不会太担心“到底要学多少种语言”这样的问题了。

 

   接下来,我猜大家很想问,又不是特别好意思问的,就是“你们面试都考些什么题?”“有没有传说中的题库?”,这个没有什么好保密的,我们没有所谓“题库”,我们一般问的都是基础的算法以及和实际相关的问题。有一次我面试一位同学,从简历上可以看到她的成绩非常好,她学习了很多语言,也研究过“设计模式”、“架构”等,她对Windows,Linux 也很熟悉。我的问题是:如何写一个短小的程序,让计算机的任务管理器显示CPU 占用率保持为50%?。

 

   她考虑了很久,最后写了:

       while (true)

                  if (busy)  i++;

                  else

  

   她问:那else 怎么办?怎么能让电脑不做事情?

     我说:对呀,怎么才能让电脑闲下来?你可以上网查查资料。 

   她很快地在搜索引擎中输入“50%  CPU 占用率”等关键字,但是没有返回任何结果(这篇文章出来之后,也许情况会好一点)。

 

     电脑的CPU 是怎么被调度的?CPU 占用率是通过什么方法得到的?程序员如何能通过程序控制?要解决这个问题,需要上面提到的各个专业课的知识,更重要的是,在实践中学到的经验和技巧。

 

   好的程序员的另一个标准是,能很快地学以致用。对于上面的问题,很多同学都能快速地查找MSDN,研究API,找到了不止一种正确而优美的解法。遗憾的是,上面提到的那位同学到面试结束时仍然停留在空白的else 那里。从我的观察来看,她似乎从来没访问过www.msdn.com网站。

 

   总之,我们的程序面试没有传说中的那么神秘,都是简单,实际的问题。如果大家感兴趣,我想我们可以在这里分享更多的所谓“微软面试题”。下面是一个实习生写的程序的结果,他用不多的代码,让CPU 的占用率呈现出一个优美的正弦曲线:

 

三.态度好

 

   态度好,这个“好”的定义有时候相当主观,很多人会想到EQ,对于这个问题已经有很多精辟的论述,比如普林斯顿大学贡三元教授写的这一篇《青年人如何获得成功、自信与快乐》。我简单讲讲我观察到的成功的实习生的一些共性——好奇心和“我能做”的态度。

 

   这个研究成果是怎么做出来的?这个游戏为什么这么让人着迷?计算机科学有无数的问题等着人们去问、去解答。好奇心驱使人们去刨根问底,发现隐藏在表面现象后面的真相,而不是想当然,人云亦云。有了好奇心还不够,还要有“我能做”的态度。临渊羡鱼之后,要有积极的态度回去织一张更大的网——我就要试试看,如果别人能做到,我为什么做不到,甚至做得更好?

### 使用TensorFlow计算与三好学生评选或评价体系相关的权重值 对于涉及多因素综合评判的问题,如三好学生的评选,通常涉及到多个评估指标。这些指标可能包括学业成绩、社会活动参与度、品德表现等多个方面。为了利用TensorFlow来构建一个能够自动学习并调整各评估标准之间相对重要性的模型,可以采用一个多层感知机(MLP)架构来进行建模。 考虑到该问题是关于对学生进行全面素质评定的任务,这属于典型的监督学习范畴内的回归或多分类问题之一,具体取决于最终输出的形式——如果目标是预测具体的分数,则视为回归;若是划分成不同等级则为多类别分类[^1]。 #### 构建模型 首先定义输入特征向量`X`,它包含了所有用于衡量学生成绩的因素,比如考试成绩、课外活动评分等。接着设定标签`Y`表示期望的结果,即是否被评为三好学生或是其对应的具体得分。之后创建一个多层神经网络,在这里选用两层隐藏层作为例子: ```python import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Dropout model = Sequential([ Dense(64, activation='relu', input_shape=(input_dim,)), # 输入维度需根据实际数据集确定 Dropout(0.5), Dense(32, activation='relu'), Dropout(0.5), Dense(output_units, activation='softmax') # 输出单元数量依据任务性质决定 ]) ``` 此处假设最后一层采用了Softmax激活函数,适用于当输出为离散型变量的情况,例如将学生划分为几个不同的荣誉级别。如果是连续数值类型的输出,则应选择其他合适的激活方式,像线性激活函数。 #### 编译与训练模型 编译阶段指定了损失函数以及优化算法的选择,这对于指导模型参数更新至关重要。针对三好学生这样的分类问题,交叉熵常被用来测量预测分布和真实分布之间的差异程度。而对于回归类问题,则更倾向于均方误差(MSE)这类度量准则。 ```python model.compile(optimizer='adam', loss='categorical_crossentropy' if classification else 'mse', metrics=['accuracy'] if classification else ['mae']) history = model.fit(X_train, Y_train, epochs=epochs_num, batch_size=batch_sz, validation_split=val_ratio) ``` 通过上述过程中的反向传播机制,TensorFlow会自动调整每一层内部连接上的权值大小,从而使得整个系统的性能达到最优状态。在这个过程中形成的那些最终权重就反映了各个影响因子在整个决策流程里所占的重要性比例。 #### 提取权重 一旦完成了模型的训练,就可以访问每层内含有的可训练参数,进而获取到想要了解的重要系数。对于Dense层而言,可以通过`.get_weights()`方法获得当前层所有的权重矩阵W及其偏置项b。 ```python for layer in model.layers: weights, biases = layer.get_weights() print(f"Weights shape {weights.shape}, Bias shape {biases.shape}") ``` 以上就是基于TensorFlow框架下实现对类似于三好学生这样复杂对象进行量化评估的方法概述,并展示了怎样从中提取出具有解释意义的关键权重信息。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值