
Hello, I'm an AI student and I'd like to participate in this year's SoC with an Artificial Neural Networks library. The library will consist of basic elements of a NN: neurons, layers, teaching algorithms, neuron functions (plus common usages: linear, sigmoid, gaussian, winner-takes-all). It will also include the implementation of some popular NNs: Multilayer Perceptron, Hopfield Network, Kohonen Network. I know it's a bit of a high level library, and I'd like some feedback whether it's appropriate for Boost. I also have a question. The proposal on the GSoC 2008 page for the implementation of Fixed Decimal also sounds appealing to me. So should I choose one project and apply for it or should I apply for both of them separately? Milan

Hi Milan, Your proposal sounds like a "nice" idea, but wouldn't it be better to generalize your ANN library into a generic maximum likelihood estimation library - because at the end of the day that is what an ANN is, nothing more nothing less it would also provide the users of the library access to other estimation/modeling paradigms, which is a good thing. Arash Partow __________________________________________________ Be one who knows what they don't know, Instead of being one who knows not what they don't know, Thinking they know everything about all things. http://www.partow.net Milan Rusev wrote:
Hello,
I'm an AI student and I'd like to participate in this year's SoC with an Artificial Neural Networks library. The library will consist of basic elements of a NN: neurons, layers, teaching algorithms, neuron functions (plus common usages: linear, sigmoid, gaussian, winner-takes-all). It will also include the implementation of some popular NNs: Multilayer Perceptron, Hopfield Network, Kohonen Network. I know it's a bit of a high level library, and I'd like some feedback whether it's appropriate for Boost.
I also have a question. The proposal on the GSoC 2008 page for the implementation of Fixed Decimal also sounds appealing to me. So should I choose one project and apply for it or should I apply for both of them separately?
Milan

Arash Partow <arash@partow.net> writes:
Hi Milan, Your proposal sounds like a "nice" idea, but wouldn't it be better to generalize your ANN library into a generic maximum likelihood estimation library - because at the end of the day that is what an ANN is, nothing more nothing less it would also provide the users of the library access to other estimation/modeling paradigms, which is a good thing.
I would not agree that ANNs are simply one MLE estimation technique. For one thing, there is such a variety of techniques that all can be considered "artificial neural networks" that I would be very hesitant to make any such generalizations about them. Although I agree that some specific instances of ANN techniques can be described in statistical terminology (e.g. any minimization of squared error can be referred to as maximizing the likelihood assuming the output of the network specifies the mean of a Gaussian distribution, but depending on the application, this may or may not be a useful insight), ANN techniques are not all statistical in nature. I do agree that it may be useful for Boost to have libraries that provide a wide range of statistical facilities, but I'd say that ANNs are really a rather separate thing for the most part. -- Jeremy Maitin-Shepard

OK, a statistics library sounds better to me, too. So how about that (speaking in pseudo code): There is a base class: distribution { get_probability(value); // P(value) get_comulutative_probability(value); //P(x <= value) generate_random(); get_expectation(); get_variance(); //more } Specific distributions will derive from it and expose their parameters too; discrete distributions may have a method get_values(). Factories: distribution create_distribution(samples, distribution_type); // given a specific distribution and a set of samples find the MLE (the parameters of the distribution); implemented specifically for each distribution distribution create_ distribution(samples); // given a set of samples approximate an unknown distribution (e.g. with a Monte Carlo or smth like this); maybe the method for the generation will be a parameter too. There may be methods of inferring some properties of a distribution without generating the whole of it first. Operations: distribution create_joint_distr(distribution, distribution); distribution create_sum(distribution, distribution); distribution create_difference(distribution, distribution); Other things I can think of.

Looks good, I like distribution world. But as you described, there is only distribution, what about the algorithms such as Bayes, Maximum Likelihood ... and they are not restricted to specific distributions. On Tue, Mar 25, 2008 at 4:16 PM, Milan Rusev <milan.rusev@gmail.com> wrote:
OK, a statistics library sounds better to me, too.
So how about that (speaking in pseudo code):
There is a base class:
distribution
{
get_probability(value); // P(value)
get_comulutative_probability(value); //P(x <= value)
generate_random();
get_expectation();
get_variance();
//more
}
Specific distributions will derive from it and expose their parameters too;
discrete distributions may have a method get_values().
Factories:
distribution create_distribution(samples, distribution_type); // given a specific distribution and
a set of samples find the MLE (the parameters of the distribution); implemented specifically for each distribution
distribution create_ distribution(samples); // given a set of samples approximate an
unknown distribution (e.g. with a Monte Carlo or smth like this);
maybe the method for the generation will be a parameter too.
There may be methods of inferring some properties of a distribution without generating the whole of it first.
Operations:
distribution create_joint_distr(distribution, distribution);
distribution create_sum(distribution, distribution);
distribution create_difference(distribution, distribution);
Other things I can think of.
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
-- ------------------------------- Enjoy life! Barco You

Milan Rusev wrote:
OK, a statistics library sounds better to me, too.
So how about that (speaking in pseudo code):
Um have you seen: http://svn.boost.org/svn/boost/trunk/libs/math/doc/sf_and_dist/html/math_too... ? John.

"John Maddock" <john@johnmaddock.co.uk> wrote:
Um have you seen: http://svn.boost.org/svn/boost/trunk/libs/math/doc/sf_and_dist/html/math_too... ?
Ah, I hadn't seen it indeed, sorry. Seems like MPL is being developed too: http://boost-sandbox.sourceforge.net/libs/accumulators/doc/html/index.html#a.... I'll give it another try (this time I checked the docs more thoroughly :)). While I was thinking about the library I thought it would be good to have a general set of algorithms for dealing with real functions. So I thought about numerically computing some popular functionals: get_derivative(Fun f); get_integral(Fun f); get_definite_integral(Fun f, T a, T b); get_function(samples); // e.g. interpolation with a polynomial/splines/... get_polynomial_approximation(Fun f); and transforms: FFT, wavelet transform, etc. Fun could be anything with T operator()(T x): get_integral(_1*_1+_1)(x);

-----Original Message----- From: boost-bounces@lists.boost.org [mailto:boost-bounces@lists.boost.org] On Behalf Of Milan Rusev Sent: 25 March 2008 19:40 To: boost@lists.boost.org Subject: Re: [boost] [gsoc 2008] Neural Networks library
"John Maddock" <john@johnmaddock.co.uk> wrote:
Um have you seen:
http://svn.boost.org/svn/boost/trunk/libs/math/doc/sf_and_dist/ html/math_toolkit/dist.html ?
Ah, I hadn't seen it indeed, sorry. Seems like MPL is being developed too: http://boost-sandbox.sourceforge.net/libs/accumulators/doc/html /index.html#accumulators.preface.
You might be able to have quite a lot of fun combining Boost.Accumlators and the Math Toolkit to demonstrate some of the common statistics tricks - a step up towards a SAS/SPS style GUI Stats package, but still in the 'C++ domain'?
I'll give it another try (this time I checked the docs more thoroughly :)).
While I was thinking about the library I thought it would be good to have a general set of algorithms for dealing with real functions. So I thought about numerically computing some popular functionals:
get_derivative(Fun f); get_integral(Fun f); get_definite_integral(Fun f, T a, T b); get_function(samples); // e.g. interpolation with a polynomial/splines/... get_polynomial_approximation(Fun f);
and transforms: FFT, wavelet transform, etc.
Fun could be anything with T operator()(T x): get_integral(_1*_1+_1)(x);
Also interesting of course. Paul --- Paul A Bristow Prizet Farmhouse, Kendal, Cumbria UK LA8 8AB +44 1539561830 & SMS, Mobile +44 7714 330204 & SMS pbristow@hetp.u-net.com

Milan Rusev wrote:
"John Maddock" <john@johnmaddock.co.uk> wrote:
Um have you seen: http://svn.boost.org/svn/boost/trunk/libs/math/doc/sf_and_dist/html/math_too... ?
Ah, I hadn't seen it indeed, sorry. Seems like MPL is being developed too: http://boost-sandbox.sourceforge.net/libs/accumulators/doc/html/index.html#a....
I'll give it another try (this time I checked the docs more thoroughly :)). While I was thinking about the library I thought it would be good to have a general set of algorithms for dealing with real functions. So I thought about numerically computing some popular functionals:
get_derivative(Fun f); get_integral(Fun f); get_definite_integral(Fun f, T a, T b); get_function(samples); // e.g. interpolation with a polynomial/splines/... get_polynomial_approximation(Fun f);
and transforms: FFT, wavelet transform, etc.
Fun could be anything with T operator()(T x): get_integral(_1*_1+_1)(x);
All good ideas, but I'd encourage you to concentrate on one field and make a really good proposal based on that. For example a good numeric quaderature / ODE solver library would probably fill a summers work, likewise the other ideas, if you have time to do them all then great, but it's generally better to submit a tightly focused proposal with a clear vision of than a larger ragbag of ideas. HTH and good luck! John.
participants (6)
-
Arash Partow
-
Barco You
-
Jeremy Maitin-Shepard
-
John Maddock
-
Milan Rusev
-
Paul A Bristow