.. _intro:

Introduction
============

PyBrain's concept is to encapsulate different data processing algorithms in what
we call a :class:`Module`. A minimal Module contains a forward implementation 
depending on a collection of free parameters that can be adjusted, usually 
through some machine learning algorithm. 

Modules have an input and an output buffer, plus corresponding error buffers 
which are used in error backpropagation algorithms.

They are assembled into objects of the class :class:`Network` and are 
connected via :class:`Connection` objects. These may contain a number of 
adjustable parameters themselves, such as weights. 

Note that a Network itself is again a Module, such that it is easy to build 
hierarchical networks as well. Shortcuts exist for building the most common 
network architectures, but in principle this system allows almost arbitrary 
connectionist systems to be assembled, as long as they form a directed acyclic
graph.

The free parameters of the Network are adjusted by means of a :class:`Trainer`,
which uses a :class:`Dataset` to learn the optimum parameters from examples. 
For reinforcement learning experiments, a simulation environment with an 
associated optimization task is used instead of a Dataset. 

.. image:: ../pics/dataprocessing_flowchart.*
