All Downloads are FREE. Search and download functionalities are using the official Maven repository.

gov.sandia.cognition.learning.function.scalar.RectifiedLinearFunction Maven / Gradle / Ivy

There is a newer version: 4.0.1
Show newest version
/*
 * File:            RectifiedLinearFunction.java
 * Authors:         Justin Basilico
 * Project:         Cognitive Foundry
 * 
 * Copyright 2014 Cognitive Foundry. All rights reserved.
 */

package gov.sandia.cognition.learning.function.scalar;

import gov.sandia.cognition.annotation.PublicationReference;
import gov.sandia.cognition.annotation.PublicationType;
import gov.sandia.cognition.math.AbstractDifferentiableUnivariateScalarFunction;

/**
 * A rectified linear unit, which is the maximum of its input or 0. It is 
 * typically used as an activation function in a neural network. Generally, its
 * derivative is 1 for values larger than 0 and 0 for those smaller than 0.
 * Although the derivative is ill-defined at 0 itself, the implementation treats
 * the derivative at 0 as 0. It is typically useful for handling the vanishing
 * gradient problem.
 * 
 * @author  Justin Basilico
 * @since   3.4.0
 */
@PublicationReference(
    author="Wikipedia",
    title="Rectifier",
    type=PublicationType.WebPage,
    year=2014,
    url="http://en.wikipedia.org/wiki/Rectifier_(neural_networks)"
)
public class RectifiedLinearFunction
    extends AbstractDifferentiableUnivariateScalarFunction
{

    /**
     * Creates a new {@link RectifiedLinearFunction}.
     */
    public RectifiedLinearFunction()
    {
        super();
    }

    @Override
    public RectifiedLinearFunction clone()
    {
        return (RectifiedLinearFunction) super.clone();
    }

    @Override
    public double evaluate(
        final double input)
    {
        // f(x) = max(0, x)
        if (input > 0.0)
        {
            return input;
        }
        else
        {
            return 0.0;
        }
    }

    @Override
    public double differentiate(
        final double input)
    {
        if (input > 0.0)
        {
            return 1.0;
        }
        else
        {
            return 0.0;
        }
    }
    
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy