.. _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.*
