深度学习4:神经网络的架构和类型

人类是如何学习的?时代在改变,有些观念是永恒不变的,信息比肉体的存在更长久,虽然信息存储在我们的大脑里,它却可以代代相传。我们的大脑可以接收五类感知信息(视觉、听觉、触觉、嗅觉、味觉),并由其创造出层层概念,如果我们足够幸运,就能在老师亲自指导下学会一项技能当我们身处我们某个环境中,我们可以感受到周遭环境,看到眼前的障碍,并试图预测接下来的走向。如果初次的尝试失败了,没有关系,有了试错的过程,我们可以掌握任何技能,但是什么给了大脑这种特殊的能力,使人脑不同于自然界中的其他生命

所有我们经历或感受到的想法和记忆自我认知,都产生于大脑,分子层面,大脑油大约1000亿个神经细胞(称神经元)组成每个神经云负责三项工作,第一项工作是从树突接受一组信号;第二项工作是把这些信号整合在一起,决定是否需要把信息传递给细胞体中;最后一项工作是如果信号总和超过了一定阈值,发送动作电位信号并通过它们的轴突传给下一组神经元。

神经网络支配大脑,给了智能灵感,人脑智能发明了现代语言,航天科技以及变形金刚,使得人类成为万物之灵,让我们在地球上生存并繁衍。但由于我们依旧是物种的一员,我们需要面对生存的威胁,迫在眉睫的气候变化带来的威胁生化武器的可能、小行星的影响,这些重要的问题需要我们的生物神经网络,一代又一代人类去解决如果可以利用这种生物神经网络创造一种人工的神经网络,并在类似硅这样的非生物基质上运行,一切会如何?

 

可以给机器超过人类的计算能力和数据让它用超过人类一千甚至百万倍的速度解决问题1943年,两位早起的科学家Warren McCullochWalter Pitts发明了第一个神经元计算模型,他们的模型演示了一个神经元,可以接收二进制,将它们求和并且如果求和后超过一定阈值,就输出1如果没有就输出0。这是一个简单的模型,但是在AI的早期,这可相当了不起,计算机科学家们讨论其可能性

几年,一个叫Frank Rosenblatt的心理学家,对McCulloch-Pitts的模型任然缺少学习机制而感到失望,所以他在人的想法之上设想了一个神经模型称之为感知器(Perception也称作单层前馈神经网络。我们称之为前馈,是因为数据只沿着一个方向前进,感知器引入了输入的权值概念,因此给定一些输入输出的训练集,它可以通过增大或减少每个连续特征数据的权值并依据每个训练集输出值来学习一个函数。这些权重值以数学的形式应用于输入,这样在每次迭代之后,输出的预测变得更准确。

为了更好地理解训练过程,接下来我们将使用python来建立一个单层神经网络并且只依赖于Numpy。


 

 

实现定义一个网络模型,网络模型如上图,代码如下图


然后再main函数中初始化网络,并进行训练测试:


测试模型时,输入值矩阵为4*3,输出矩阵为4*1.


参考资料:

网易云课堂,《硅谷大牛带你入门深度学习》第二讲

更多更好文章,欢迎关注微信公众号:深圳程序媛(updatedaybyday)

附源代码:(编译环境Jupyter Notebook,python3)

# coding: utf-8


# In[16]:


from numpy import exp, array, random, dot
class NeuralNetwork():
    def __init__(self):
        #Seed the random number generator,so it generates the same numbers
        #every time the program runs
        random.seed(1)
        
        #we model a single neuron,with 3 input connections and 1 output connection
        #we assign random weights to a 3*1 matrix,with values in the range -1 to 1
        self.synatic_weights = 2 * random.random((3,1))-1
    #the sigmoid function,which describes an s shaped curve
    #we pass the weighted sum of the iputs through this function
    #to normalise them between 0 and 1
    def __sigmoid(self, x):
        return 1 / (1 + exp(-x))
    #gradient of the sigmoid curve
    def __sigmoid__derivative(self, x):
        return x*(1-x)
        
    def train(self, training_set_inputs, training_set_outputs, number_of_training_iterations):
        for iteration in range(number_of_training_iterations):
            #pass the training set through our neural net
            output = self.predict(training_set_inputs)
            # calculate the error
            error = training_set_outputs.T-output
            #mutiply the error by the input ad again by the gradient of the sigmoid curve
            delta = error* self.__sigmoid__derivative(output)
            adjustment = training_set_inputs.T.dot(delta)        
            #adjust the weights
            self.synatic_weights +=adjustment  
       
        
    def predict(self, inputs):
        #pass inputs through neural network(our single neuron)
        return self.__sigmoid(dot(inputs, self.synatic_weights))
        
        
        
#mian
if __name__ == '__main__':
   #initialise a single neuron neural network
   neural_network = NeuralNetwork()
   
   print('Random starting synaptic weights:')
   print(neural_network.synatic_weights)


   #The training set. We have 4 examples,each consisting of 3 input values and 1 output value.


   training_set_inputs = array([[0,0,1],[1,1,1],[1,0,1],[0,1,1]])
   traing_set_outputs = array([[0,1,1,0]])
   
   #train the neural network using a training set.
   #Do it 10,000 times and make small adjustments each time
   neural_network.train(training_set_inputs, traing_set_outputs, 10000)
   
   print('new synaptic weights after training:')
   print(neural_network.synatic_weights) 


   #Test the neural network
   print('predicting')
   print(neural_network.predict(array([1,0,0]))) 




# In[ ]:










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

haimianjie2012

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值