Prefer listenTo over on.
Passing the index
Simplest solution would be to wrap the callback into an anonymous function.
But since we're looping and value of i will change, we need to create a simple function which returns a new function using the frozen value of i. (This is similar to using TJ's bind answer)
function getChangeSpeedHandler(index) {
    return function() {
        this._handleChangeSpeedSlider(index);
    }
}
for (i = 0; i < 3; i++) {
    var slider = sliderObj[i] = new SliderView();
    this.listenTo(slider, "change:value", getChangeSpeedHandler(i));
}
Passing the slider view
Assuming the value of i in the handler is only used to get the right sliderObj, you could pass the slider view directly.
function getChangeSpeedHandler(slider) {
    return function() {
        this._handleChangeSpeedSlider(slider);
    }
}
for (i = 0; i < 3; i++) {
    var slider = sliderObj[i] = new SliderView();
    this.listenTo(slider, "change:value", getChangeSpeedHandler(slider));
}
Delegating the event handling to the slider view
If you want to handle changes inside the SliderView, it should handle the event itself.
this.listenTo(this.model, 'change:value', this.onValueChange);
Triggering custom events
If it's really the parent that needs to know the slider and their number is dynamic, you could pass the i value to the SliderView and then it could trigger a custom event.
In the slider view:
var SliderView = Backbone.View.extend({
    initialize: function(options) {
        options = options || {};
        this.index = options.index;
        // ...
    },
    onValueChange: function(model, value, options) {
        this.trigger('slider:change', value, this.index, this);
    },
});
Then in the parent:
initialize: function() {
    for (i = 0; i < 3; i++) {
        var slider = sliderObj[i] = new SliderView({ index: i });
        this.listenTo(slider, "slider:change", this._handleChangeSpeedSlider);
    }
},
_handleChangeSpeedSlider: function(value, index, sliderView) {
    // handle the change
}